Системная ошибка: путь к исполняемому файлу не является абсолютным

6689
Prashanth CM

У меня есть следующий код 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 работать?

0
удалить `exec`, это не требуется (скрипт должен содержать hashbang для вызова оболочки) sebasth 7 лет назад 2

2 ответа на вопрос

1
Fanatique

Вы не можете использовать execв конфигурации системного блока обслуживания.
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 
@KamilMaciorowski ты прав насчет моего выбора формулировки, исправлено. Fanatique 6 лет назад 0
0
Ajay CJ

«EXecStart =» нужен абсолютный путь для запуска службы. Получите полный путь к вашему файлу .sh и добавьте его в оператор ExecStart.

Снова "manpage" даст вам подробную информацию.

Похожие вопросы