Я создал этот сценарий:
[Unit]
Description=test
[Service]
WorkingDirectory=/home/someuser
ExecStart=/somescript.sh
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=autodeploy
Environment=NODE_ENV=production PORT=1494
[Install]
WantedBy=multi-user.target
Но когда я выполняю его, это говорит:
Process: 8986 ExecStart=/somescript.sh (code=exited, status=203/EXEC)
Я понял, что это сообщение означает, что сценарий не будет найденный... Почему Рабочий Каталог, не работающий на меня?
Спасибо.
systemd WorkingDirectory=
установка определяет, на котором каталоге сервис будет запущен, то же как тогда, когда Вы используете cd
изменить каталог, когда Вы работаете в оболочке.
Это не означает что все другие пути (включая это от ExecStart=
) теперь будет относительно него, таким образом, все еще необходимо полностью указать путь к сценарию в той директиве:
ExecStart=/home/someuser/somescript.sh
Возможно, Вы думали RootDirectory=
директива вместо этого? Тот каталог использует chroot
управляйте для переключения корня файловой системы, замеченной процессом каталогом, из которого Вы указываете, таким образом, от Вашего использования /
для местоположения сценария, который похож, возможно, что Вы хотели... Однако использование RootDirectory=
требует, чтобы у Вас был образ системы с двоичными файлами и библиотеками под ним. Как, у Вас должен быть a /bin/sh
выполнять Ваш сценарий оболочки и a /lib
с libc, и т.д. Обычно Вы не можете просто использовать RootDirectory=
к примерно любому каталогу, который Вы любите...
Таким образом, мой совет здесь для устранения проблемы, которую Вы видите, состоит в том, чтобы просто обновить ExecStart=
перечислять полный путь к Вашему сценарию.
Я нашел относительным путям работу, но Вы используете полный путь для ExecStart. Это не ищет/home/someuser/somescript.sh, это ищет/somescript.sh, и это не то, где это.
Можно, вероятно, получить его работающий путем изменения ExecStart =./somescript.sh