Я пытаюсь автоматически выполнить следующую команду на начальной загрузке системы с systemd.
/usr/bin/node /var/www/html/rest-api/dist/index.js
Я проверил работы команды путем выполнения его вручную, но когда я пытаюсь инициировать его с a rest.service
файл я получаю ошибки.
rest.service:
[Unit]
Description=REST API
After=network.target
[Service]
ExecStart=/usr/bin/node /var/www/html/rest-api/dist/index.js
Restart=always
User=nobody
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/rest-api/dist
[Install]
WantedBy=multi-user.target
journalctl -u rest-api
вывод:
Где rest.service
Пользователь и Группа = никто:
Oct 06 02:10:28 ip-172-31-26-208 systemd[7172]: rest-api.service: Failed at step GROUP spawning /usr/bin/node: No such process
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Main process exited, code=exited, status=216/GROUP
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Unit entered failed state.
Oct 06 02:10:28 ip-172-31-26-208 systemd[1]: rest-api.service: Failed with result 'exit-code'.
Oct 06 02:10:29 ip-172-31-26-208 systemd[1]: rest-api.service: Service hold-off time over, scheduling restart.
Oct 06 02:10:29 ip-172-31-26-208 systemd[1]: Stopped REST API.
Где rest.service
Пользователь и Группа = корень:
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: Started REST API.
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Main process exited, code=exited, status=200/CHDIR
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Unit entered failed state.
Oct 06 02:20:11 ip-172-31-26-208 systemd[1]: rest-api.service: Failed with result 'exit-code'.
Oct 06 02:20:12 ip-172-31-26-208 systemd[1]: rest-api.service: Service hold-off > time over, scheduling restart.
Oct 06 02:20:12 ip-172-31-26-208 systemd[1]: Stopped REST API.
Какие-либо идеи, как зафиксировать?
code=exited, status=200/CHDIR
Ваше ключевое сообщение об ошибке.
Это указывает, что /var/www/rest-api/dist
не существует или не доступен в то время, когда Ваша услуга пытается работать.
, Если это смонтировано по сети, After=network.target
, не обязательно означает, что любое данное сетевое монтирование было смонтировано. Даже возможно, что медленное для запуска локального диска еще не могло бы быть смонтировано. Чтобы видеть, испытываете ли Вы состояние состязания, попытайтесь добавить задержку или возможно использовать RequiresMountsFor=
, или даже ConditionPathExists=
.
источник: https://www.freedesktop.org/software/systemd/man/systemd.unit.html