Systemd-Fehler: Der ausführbare Pfad ist nicht absolut

6714
Prashanth CM

Ich habe den folgenden Code von 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 

wo ich versuche, es auszuführen, erhalte ich den untenstehenden Fehler.

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. 

Ich weiß, dass es keinen absoluten Pfad des exec-Befehls gibt, aber da exec nicht als binär verfügbar ist, kann ich keinen absoluten Pfad dafür verwenden. Wie kann ich diesen ExecStart ausführen lassen?

0
`exec` entfernen, es ist nicht erforderlich (Skript sollte Hashbang enthalten, um die Shell aufzurufen) sebasth vor 6 Jahren 2

2 Antworten auf die Frage

1
Fanatique

Sie können nicht execin einer systemd Service Unit-Konfiguration verwendet werden.
execist eine integrierte Shell und kann nicht direkt vom Dateisystem aus aufgerufen werden (sie befindet sich nicht im Dateisystem) - type execund whereis execzeigt Ihnen dies.
Verwenden Sie die Shell, in der sie geschrieben sind.

Wenn es sich beispielsweise um ein bashSkript handelt, können Sie das Skript folgendermaßen ausführen:

bash /var/RCC/RCClogger.sh 

Nun bashist eine ausführbare und tut einen absoluten Pfad haben: /bin/bash. Ihr ExecStart sieht folgendermaßen aus:

ExecStart=/bin/bash /var/RCC/RCClogger.sh 

Eine andere Möglichkeit ist, einfach ein a shebangam Anfang des Skripts hinzuzufügen :

#!/bin/bash ... script code ... 

Dadurch wird das Betriebssystem angewiesen, die Datei /bin/bashin diesem Fall mit dem angegebenen Interpreter auszuführen .

Danach machen Sie Ihr Skript einfach ausführbar:

chmod +x /var/RCC/RCClogger.sh 

Und benutze es direkt als ExecStart:

ExecStart=/var/RCC/RCClogger.sh 
@ KamilMaciorowski Sie haben Recht, ich habe meine Wortwahl gewählt, korrigiert. Fanatique vor 5 Jahren 0
0
Ajay CJ

The "EXecStart=" needs an absolute path to start the service. Get the full path to your .sh file and append it to ExecStart statement.

Again "manpage" will give you detailed info.