2017-05-13 4 views
0

Ich möchte ein Skript beim Systemstart in einer Debian 9-Box ausführen. Mein Skript funktioniert, wenn es eigenständig ausgeführt wird, aber unter Systemd fehlschlägt.System-Skript fehlgeschlagen

Mein Skript nur kopiert eine Sicherungsdatei von einem Remote-Server auf den lokalen Rechner:

#!/bin/sh 
set -e 

/usr/bin/sshpass -p "PASSWORD" /usr/bin/scp -p [email protected]:ORIGINPATH/backupserver.zip DESTINATIONPATH/backupserver/ 

Just for Privacy I Passwort ersetzt, Benutzer und Pfade oben.

Ich schrieb die folgende systemd Serviceeinheit:

[Unit] 
Description=backup script 

[Service] 
Type=oneshot 
ExecStart=PATH/backup.sh 

[Install] 
WantedBy=default.target 

Dann habe ich Berechtigungen für das Skript:

chmod 744 PATH/backup.sh 

und installierte den Dienst:

chmod 664 /etc/systemd/system/backup.service 
systemctl daemon-reload 
systemctl enable backup.service 

Wenn ich den Neustart Skript schlägt fehl:

● backup.service - backup script 
    Loaded: loaded (/etc/systemd/system/backup.service; enabled; vendor preset: enabled) 
    Active: failed (Result: exit-code) since Sat 2017-05-13 13:39:54 -03; 47min ago 
Main PID: 591 (code=exited, status=1/FAILURE) 

Ergebnis journalctl -xe:

mai 16 23:34:27 rodrigo-acer systemd[1]: backup.service: Main process exited, code=exited, status=6/NOTCONFIGURED 
mai 16 23:34:27 rodrigo-acer systemd[1]: Failed to start backup script. 
mai 16 23:34:27 rodrigo-acer systemd[1]: backup.service: Unit entered failed state. 
mai 16 23:34:27 rodrigo-acer systemd[1]: backup.service: Failed with result 'exit-code'. 

Was könnte falsch sein?

+0

Nicht gerade eine Programmierfrage, oder? –

+1

Das systemd-Journal sollte seine gesamte Ausgabe aufgezeichnet haben. Versuchen Sie 'journalctl -u backup' –

+1

Und denken Sie daran, dass Sie nicht neu starten müssen, um einen Systemd-Job auszuführen. Lass es zuerst mit 'systemctl start backup' arbeiten. –

Antwort

1

Gelöste Jungs. Es gab 2 Probleme:

1 - Ich musste die Service-Unit-Datei ändern, damit der Dienst nur ausgeführt wurde, nachdem das Netzwerk aktiv war. Der Abschnitt Einheit wurde folgendermaßen geändert:

[Unit] 
Description = World server backup 
Wants = network-online.target 
After = network.target network-online.target 

2 - Der Root-Benutzer nicht über den Remote-Host auf die bekannte Host-Liste hinzugefügt, im Gegensatz zu den normalen Benutzern ich verwenden, um das Skript zu testen.

Verwandte Themen