简体   繁体   English

系统脚本失败

[英]Systemd script fail

I want to run a script at system startup in a Debian 9 box. 我想在系统启动时在Debian 9框中运行脚本。 My script works when run standalone, but fails under systemd. 我的脚本在独立运行时可以运行,但是在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: 我编写了以下systemd服务单元:

[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: 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? 有什么事吗

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. 1-我必须更改服务单元文件才能使服务仅在网络启动后才能运行。 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. 2-与我用来测试脚本的普通用户不同,root用户没有将远程主机添加到已知主机列表中。

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: https://serverfault.com/questions/751030/systemd-ignores-return-code-while-starting-service 到类似于以下系统条目: https : //serverfault.com/questions/751030/systemd-ignores-return-code-while-starting-service

If your service or script does not fork add a & at the end to run it in the background, and exit with 0 fast. 如果您的服务或脚本未派生,请在末尾添加&并在后台运行它,并以0快速退出。 Otherwise it will be like a startup that times out and takes forever / seems like frozen service. 否则,它将像超时的启动公司一样,需要永远的时间/似乎是冻结的服务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM