2017-05-13 2 views
0

Je veux exécuter un script au démarrage du système dans une boîte Debian 9. Mon script fonctionne lorsqu'il est exécuté de manière autonome, mais échoue sous systemd.scénario Systemd échec

Mon script seulement copie un fichier de sauvegarde à partir d'un serveur distant sur la machine locale:

#!/bin/sh 
set -e 

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

Juste pour la vie privée, j'ai remplacé le mot de passe, l'utilisateur et les chemins ci-dessus.

j'ai écrit l'unité de service systemd suivante:

[Unit] 
Description=backup script 

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

[Install] 
WantedBy=default.target 

Ensuite, je configurer les autorisations pour le script:

chmod 744 PATH/backup.sh 

et installé le service:

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

Lorsque je redémarre la script échoue:

● 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) 

Résultat de 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'. 

Quoi de mal?

+0

Pas exactement une question de programmation, est-il? –

+1

Le journal systemd aurait dû enregistrer toutes ses sorties. Essayez 'journalctl -u backup' –

+1

Et n'oubliez pas que vous n'avez pas besoin de redémarrer pour essayer d'exécuter un job systemd. Faites-le fonctionner avec 'systemctl start backup' en premier. –

Répondre

1

gars. Solved Il y avait 2 problèmes:

1 - je devais changer le fichier de l'unité de service pour faire fonctionner le seul service réseau après tramait. La section de l'unité a été changée en:

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

2 - L'utilisateur root n'a pas l'hôte distant ajouté à la liste d'hôtes connue, contrairement à l'utilisateur ordinaire j'ai utilisé pour tester le script.