I want to run a script at system startup in a Debian 9 box. My script works when run standalone, but fails under systemd.

My script just copies a backup file from a remote server to the local machine:

#!/bin/sh set -e /usr/bin/sshpass -p "PASSWORD" /usr/bin/scp -p USER@10.0.0.2:ORIGINPATH/backupserver.zip DESTINATIONPATH/backupserver/ 

Just for privacy I replaced password, user, and paths above.

I wrote the following systemd service unit:

[Unit] Description=backup script [Service] Type=oneshot ExecStart=PATH/backup.sh [Install] WantedBy=default.target 

Then I set permissions for the script:

chmod 744 PATH/backup.sh 

And installed the service:

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

When I reboot the script fails:

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

Result of 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'. 

What could be wrong?

8

2 Answers

Solved guys. There was 2 problems:

1 - I had to change the service unit file to make the service run only after network was up. The unit section was changed to:

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

2 - The root user did not have the remote host added to the known host list, unlike the ordinary user I used to test the script.

Failed with result 'exit-code' you could try this on your last line:

# REQUIRED FOR SYSTEMD: 0 means clean no error exit 0 

You may also need to add:

Type=forking 

to the systemd entry similar to:

If your service or script does not fork add a & at the end to run it in the background, and exit with 0 fast. Otherwise it will be like a startup that times out and takes forever / seems like frozen service.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy