Я запускаю Ubuntu 16.04 на старом HP Laptop
Я установил некоторое программное обеспечение на нем для создания маленького самодельного plex сервера. Я установил гидролокатор, радар, наводнение, конверт, и т.д. и т.д., и они все автоматически запускаются при запуске!
Несколько дней назад я решил установить rclone также, и я создал (благодаря проекту GitHub) несколько папок, которые должны быть смонтированы при каждом запуске путем запуска сценария (я запускаю его через терминальную запись sudo ~/bin/check.mount
). Sonarr и Radarr созданы, чтобы загрузить материал через наводнение к временной папке и затем экспортировать его в одну из этих двух смонтированных папок.
Проблема, к тому времени, когда я вручную запускаю сценарий, Sonarr/Radarr уже в порядке и не могут найти свои корневые папки, таким образом, они дают мне ошибку.
То, что я хотел бы сделать, создают mountgdrive.service (сервис, или независимо от того, что необходимо) автоматически запустить check.mount сценарий и, если это недостаточно, вставьте задержку sonarr.service и radarr.service! Это возможно?
Я записал это с sudo nano /etc/systemd/system/mountgdrive.service
[Unit]
Description=MountSmokeScreen
After=network.target
[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
и добавил к sonarr.service и radarr.service mountgdrive.service
в After=
бит, как это
[Unit]
Description=Sonarr
After=syslog.target network.target mountgdrive.service
[Service]
User=samsepioldoresh4ze
etcetc
....
Но это не работает! Sonarr и Radarr обычно запускаются, но диски не смонтированы! Что я делаю неправильно?
Кроме того, rtcwake не работает над моим ноутбуком - я думаю, что это - проблема ядра?! Существует ли способ зафиксировать это?
Причина, по которой у вас возникла эта проблема, заключается в том, что вы используете After=
, в то время как вам также нужны Requires=
или Wants=
.
Существует 3 основных свойства для управления зависимостями. Я постараюсь кратко объяснить разницу, но вы можете найти более подробную информацию в [Unit] Параметры раздела | freedesktop.org
After=
Эта опция только устанавливает порядок единиц, но не гарантирует, что служба завершила запуск. [тысяча сто тридцать девять]
Wants=
Эта опция позволяет вашему юниту запускаться только после того, как другой юнит закончил запуск. (Не имеет значения, был ли он запущен успешно или нет)
Requires=
Точно так же, как Wants=
, однако, это заставит ваш юнит стартовать только после зависимости успешно начались.
Вы также можете использовать обратную каждой из этих опций.
After=
инвертировано Before=
Wants=
инвертировано WantedBy=
Requires=
инвертировано RequiredBy=
Чтобы решить вашу проблему, вам нужно изменить службу монтирования на:
[Unit]
Description=MountSmokeScreen
After=network.target
Before=sonarr.service radarr.service
WantedBy=sonarr.service radarr.service
[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Или вы можете добавить Wants=mountgdrive.service
к блокам sonarr.service
и radarr.service
.
Вы можете сделать это без изменения файлов по умолчанию, выполнив следующее (Вам необходимо сделать то же самое для radarr.service
):
systemctl edit sonarr.service
И вставить следующее:
[Unit]
Wants=mountgdrive.service
[ 1149] Примечание: Вы можете заменить Wants=
на Requires
или WantedBy=
на RequiredBy=
, если не хотите, чтобы две службы запускались вообще, если mountgdrive.service
не работает (хотя Wants=
обычно достаточно и даже рекомендуется в документах).