Вопрос или проблема
Я ищу способ запустить оболочку скрипт при подключении новой файловой системы NFS. Это будет использоваться на системах Ubuntu 16/20.
Причина этого заключается в том, что время от времени соединение с сервером NFS теряется (перезагрузка, задержка сети), и данные записываются в основное подключение. Оболочка скрипта, которую я написал, изменит основное подключение, чтобы предотвратить это (chmod 400) и заставит приложение выдать ошибку. Я ищу способ вызвать этот скрипт каждый раз, когда создается новая точка монтирования NFS.
Это будет развернуто на тысячах систем, и я не буду знать точки монтирования заранее, поэтому запуск этого скрипта по правилам udev, вероятно, не сработает.
Ответ или решение
Чтобы настроить выполнение shell-скрипта при монтировании новой файловой системы NFS на системах Ubuntu 16 и 20, рассмотрим процесс, который зависит от эффективного управления событиями монтирования. Поскольку мы имеем дело с большими масштабами внедрения (тысячи систем), необходимо разработать универсальное и надежное решение, которое будет работать независимо от заранее известных точек монтирования.
1. Использование системного демона systemd
В современных версиях Ubuntu можно использовать systemd, который поддерживает триггеры событий монтирования. Мы можем создать mount unit
файл, который будет отвечать за выполнение скрипта каждый раз, когда новое NFS-устройство монтируется.
Шаги для реализации:
-
Создание shell-скрипта:
Убедитесь, что ваш скриптyour_script.sh
находится в доступном месте (например, в/usr/local/bin/
) и имеет разрешения на выполнение.#!/bin/bash chmod 400 /path/to/underlying/mount # Другие действия, которые необходимо выполнить
Не забудьте сделать его исполняемым:
chmod +x /usr/local/bin/your_script.sh
-
Создание службы systemd:
Создайте файл службы, например/etc/systemd/system/nfs-mount-listener.service
со следующим содержимым:[Unit] Description=Trigger script on NFS mount [Service] Type=oneshot ExecStart=/usr/local/bin/your_script.sh [Install] WantedBy=multi-user.target
-
Настройка триггеров для монтирования:
Создайте файлы для триггера в/etc/systemd/system
или в папке переопределения, чтобы systemd знал, когда запускать вашу службу. Например, создайте файл/etc/systemd/system/mnt-nfs.mount
. Имя файла должно совпадать с требуемым точкой монтирования NFS.Если вы не знаете заранее имена точек монтирования, можете использовать шаблон, например:
[Unit] Description=NFS Mount Trigger [Install] Also=nfs-mount-listener.service
Это позволяет автоматически привязывать триггер к службе.
-
Перезагрузка демон systemd:
После всех изменений необходимо перезагрузить systemd, чтобы он применил изменения:systemctl daemon-reload
-
Тестирование:
Чтобы протестировать, выполните монтирование NFS и посмотрите, выполняется ли ваш скрипт. Для проверки вы можете использовать командыsystemctl status nfs-mount-listener.service
.
2. Использование inotify для мониторинга
Если systemd не подходит, вы можете использовать inotifywait
, который будет следить за изменениями в /proc/mounts
:
-
Установите
inotify-tools
, если они не установлены:sudo apt-get install inotify-tools
-
Затем создайте скрипт для мониторинга:
#!/bin/bash while true; do inotifywait -e create /proc/mounts /usr/local/bin/your_script.sh done
-
Запустите этот скрипт в фоне или создайте его службу systemd для управления.
Заключение
Настройка триггера для выполнения shell-скрипта при монтировании NFS на системах Ubuntu 16/20 может быть выполнена с помощью systemd, что гарантирует надежность и эффективность решения, особенно в условиях масштабируемости. Выбор подхода необходимо делать в зависимости от конкретных требований системы и окружения. Важно провести тестирование всех изменений на небольшом числе систем перед развертыванием на всех платформах.