Системная ошибка: путь к исполняемому файлу не является абсолютным
У меня есть следующий код systemd ниже.
[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no
[Install]
WantedBy=multi-user.target
где я пытаюсь запустить его, я получаю ошибку ниже.
Mar 23 04:45:52 localhost.localdomain systemd[1]:
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute,
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks
both ExecStart= and ExecStop= setting. Refusing.
Я знаю, что это из-за отсутствия абсолютного пути к команде exec, но так как exec недоступен как двоичный файл, я не могу использовать для него абсолютный путь. Как заставить этот ExecStart работать?
2 ответа
Вы не можете использовать exec
в конфигурации единицы обслуживания systemd. exec
является встроенной оболочкой и не может вызываться напрямую из файловой системы (она не находится в файловой системе) - type exec
а также whereis exec
покажет вам это.
Используйте оболочку, в которой они написаны.
Например, если это bash
скрипт, вы можете запустить скрипт так:
bash /var/RCC/RCClogger.sh
Сейчас, bash
является исполняемым файлом и имеет абсолютный путь: /bin/bash
, Ваш ExecStart будет выглядеть следующим образом:
ExecStart=/bin/bash /var/RCC/RCClogger.sh
Другой способ - просто добавить shebang
к началу сценария:
#!/bin/bash
... script code ...
Это говорит операционной системе, чтобы запустить файл с указанным интерпретатором, /bin/bash
в этом случае.
После этого просто сделайте ваш скрипт исполняемым:
chmod +x /var/RCC/RCClogger.sh
И использовать его непосредственно как ExecStart
:
ExecStart=/var/RCC/RCClogger.sh
"EXecStart=" нужен абсолютный путь для запуска службы. Получите полный путь к вашему файлу.sh и добавьте его в оператор ExecStart.
Снова "manpage" даст вам подробную информацию.