Я использую Ubuntu 16.04 на старом ноутбуке HP
Я установил некоторое программное обеспечение на нем, чтобы создать небольшой самодельный плекс-сервер. Я установил sonarr, radarr, deluge, jackett и т. Д., И все они автоматически запускаются при запуске!
Пару дней назад я тоже решил установить rclone и создал (благодаря проекту GitHub) пару папок, которые нужно монтировать при каждом запуске, запуская скрипт (я запускаю его через запись терминала sudo ~/bin/check.mount
). Sonarr и Radarr настроены так, чтобы загружать данные через deluge во временную папку, а затем экспортировать их в одну из этих двух подключенных папок.
Проблема в том, что к тому времени, когда я вручную запускаю скрипт, 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 не работает на моем ноутбуке - я думаю, что это проблема с ядром ?! Есть ли способ это исправить?
sonarr.service
иradarr.service
послеmountgdrive.service
запуска?mountgdrive.service
работает, но ничего не делает (он не монтирует диски), а затемsonarr.service
иradarr.service
работает нормально, потому что выполняется Ubuntumountgdrive.service
.mount
единицы . Если все, что выmountgdrive.service
делаете, это монтирование каталога или чего-то подобного, вы можете изменить его на.mount
службу. Как это делает его более надежным, особенно потому, что у вас есть зависимости от него.Ответы:
Причина вы с этой проблемой, потому что вы используете ,
After=
а также необходимоRequires=
илиWants=
.Есть 3 основных свойства для управления зависимостями. Я постараюсь кратко объяснить разницу, но вы можете найти более подробную информацию в разделе [Unit] Options | freedesktop.org
After=
Эта опция только устанавливает порядок единиц, но не гарантирует, что сервис завершил запуск.
Wants=
Эта опция позволяет вашему устройству запускаться только после завершения запуска другого устройства. (Не имеет значения, успешно ли это началось или нет)
Requires=
Так же, как
Wants=
, однако, это заставит ваш модуль запускаться только после успешного запуска зависимостей.Вы также можете использовать инверсию каждого из этих параметров.
After=
инвертируетсяBefore=
Wants=
инвертируетсяWantedBy=
Requires=
инвертируетсяRequiredBy=
Чтобы решить вашу проблему, вам нужно изменить службу монтирования на:
Или вы можете добавить
Wants=mountgdrive.service
кsonarr.service
иradarr.service
единиц.Вы можете сделать это без изменения файлов по умолчанию, выполнив следующее (Вам необходимо сделать то же самое для
radarr.service
):И вставить следующее:
Примечание: Вы можете заменить
Wants=
сRequires
илиWantedBy=
с ,RequiredBy=
если вы не хотите , две службы , чтобы начать на всех , еслиmountgdrive.service
не удается (хотяWants=
достаточно обычно и даже рекомендуется в документации).EDIT:
WantedBy
иRequiredBy
опции могут быть использованы только в рамках[Install]
раздела. (Спасибо @ Янки )источник
Wants=
иWantedBy=
я определенно использовал их !! Я получаю эту ошибку, хотя, когда я перезагружаю ноутбук i.imgur.com/a3LE3G9.pngCan't open /.config/SmokeScreen/smokescreen.conf
. Может быть, у вас есть "~ / .config / ..." в вашем скрипте. Вы должны заменить тильду (~
) на полный путь, т. Е./home/you_user_name/.config/....
(Или использовать относительные пути к вашему сценарию)$HOME
не доступен во время загрузки, поскольку не зарегистрированный пользователь пока.WantedBy=
быть в[Unit]
разделе? Я думал, что это может только войти[Install]
.