1

Я нахожу systemd очень интересным, но как мне использовать его, чтобы написать скрипт для монтирования файловой системы s3ql ? Например, разработчик s3ql предоставляет конфигурацию upstart, которая выполняет эту работу.

В частности, при запуске необходимо запустить mount.s3ql (как требуемый пользователь, так как это файловая система FUSE), а при завершении работы umount.s3ql должен быть запущен. Кроме того, что если мы захотим выполнить fsck.s3ql файловую систему перед монтированием или выполнить шаг синхронизации Unison после запуска и перед выключением (все изменения, которые я внес в свой личный выскок).

На первый взгляд, я бы подумал, что мне нужно настроить модуль монтирования на systemd, но, похоже, что сервисный модуль на самом деле лучше подходит для команд запуска pre и post exec. (Все справочные страницы доступны здесь.)

И от какой цели .target зависит кодирование зависимости от сетевого подключения?

1 ответ1

1

Сначала кажется, что для mount.s3ql и umount.s3ql общая единица .mount . И команда mount и systemd поддерживают mount. помощники mount.fstype при монтаже. Однако помощник должен поддерживать стандартный метод -o options для передачи опций, чего не имеет s3ql . Кроме того, применяются те же ограничения, что и в /etc /fstab .

Таким образом, вам может быть лучше с .service который вызывает нужные команды:

[Unit]
Wants=unison@s3ql.service
After=unison@s3ql.service

[Service]
Type=forking
Environment=AUTHFILE=/path/to/authinfo2
ExecStart=/usr/sbin/mount.s3ql --authfile ${AUTHFILE} ${BUCKET} ${MOUNTPOINT}
ExecStop=/usr/sbin/umount.s3ql ${MOUNTPOINT}
TimeoutSec=5min

Поскольку не существует стандартного способа настройки сетей, а тем более того, что он фактически проверяет, работает ли соединение, нет стандартной цели systemd для того, что вы хотите. Хотя есть network.target , но он может считать себя запущенным, когда соединение еще не доступно.

Если вы используете NetworkManager, в ваш дистрибутив может быть включен модуль, работающий в режиме nm-online - например, Arch называет его NetworkManager-wait-online.service .

[Unit]
Require=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .