Я работаю над systemd
.service
сценарием, который должен запускаться после подключения сетевой папки CIFS через /etc/fstab
к /mnt/
при загрузке.
Сценарий ожидает запуска сценария зависимости OpenVPN, но я также хочу дождаться завершения монтирования.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Я попытался добавить systemd.mount
к строке:, After=network.target vpn-launch.service systemd.mount
но это не дало результатов, на которые я надеялся.
systemd-remount-fs
в свойAfter
список?Ответы:
Нет. Сделайте это правильно, а все остальное встанет на свои места, естественно.
Монтирование обрабатывается (сгенерированным) модулем монтирования systemd, который будет называться как-то так
mnt-wibble.mount
. Вы можете увидеть его фактическое имя в выводеsystemctl list-units --type=mount
команды. Вы можете рассмотреть это подробно, как и любой другой блок сsystemctl status
.Тогда очень просто: вы должны заказать запуск вашего устройства после запуска этого монтирующего устройства.
дальнейшее чтение
источник
Извините, но я пока не могу комментировать.
Как сказал JdeBP, вы должны упорядочивать при монтировании файловой системы. Вы можете предсказать имя монтируемого устройства или, альтернативно, вы можете использовать (в разделе устройства):
Эта опция создает зависимости для соответствующих блоков * .mount, чтобы сделать путь доступным до запуска службы. Это может быть не на всех системных версиях, но я использую его на компьютере с CentOS 7 последние 6 месяцев или около того.
источник
RequiresMountsFor=
него есть свои предостережения. С ошибкой RedHat # 1088057 и Крисом Зибенманом в руках вы сможете ответить на superuser.com/questions/988734 . Это и есть CIFS в этом вопросе. Но подразумевается, что этоauto
, к счастью.Хотя оба ответа верны, я хочу добавить свои два цента к обсуждению, потому что когда я искал его, мне не хватало некоторых инструкций и примеров того, как действовать.
/etc/fstab
mount -a
который монтирует все файловые системы, упомянутые в fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(должен возвращать то, что заканчивается на
.mount
)After=
оператор в*.service
файлеВот пример запуска
my-daemon
службы при загрузке, но после того, как сеть готова, смонтирован общий ресурс CIFS/mnt/cifs
иvpn-launch
запущена служба:/ И т.д. / Fstab
Примечание. Возможно, вы захотите добавить
nofail
к своим параметрам fstab (например, при использовании внешнего диска). В противном случае ваша машина не загрузится, если устройство не подключено. Смотрите статью в fstab ArchWiki/etc/systemd/system/my-daemon.service
Не забудьте включить службу так, чтобы она запускалась при загрузке:
systemctl enable my-daemon
Обратите внимание, что это работает и для других файловых систем (NFS, HDD и т. Д.).
Как уже упоминалось, оба ответа верны, и я призываю всех прочитать их, но для меня пара примеров сэкономила бы мне время.
Обновление (2019-06-25):
mnt-cifs.mount
вRequires=
список, который вызываетmy-daemon.service
сбой при запуске, когда монтирование cifs не было успешно смонтированоисточник
systemctl list-units --type=mount
?@ bm-bergmotte: спасибо за вашу инструкцию, которая мне очень помогла. Для меня это просто работает, если я поставлю
Если я не помещаю «mnt-cifs.mount» в поле «Требуется» (и в этом порядке), оно работает для перезагрузки / запуска, но служба все равно запускается, если устройство не смонтировано. После помещения его дополнительно внутрь «Требуется» служба монтирует устройство перед его запуском, если устройство не было смонтировано.
источник
After=
просто диктует порядок.Requires=
делает обязательным присутствие горы cifs (см. Суфиян Гори ответ на этот вопрос). Я обновлю свой ответ.