2017-05-13 98 views
0

我想在系统启动时在Debian 9框中运行脚本。我的脚本在独立运行时工作,但在systemd下失败。系统脚本失败

我的剧本只是复制从远程服务器上的备份文件到本地机器:

#!/bin/sh 
set -e 

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

只是为了保密我更换密码,用户和路径之上。

我写了下面的systemd服务单位:

[Unit] 
Description=backup script 

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

[Install] 
WantedBy=default.target 

然后我设置权限的脚本:

chmod 744 PATH/backup.sh 

,并安装服务:

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

当我重新启动脚本失败:

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

结果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'. 

出了什么问题?

+0

不完全是一个编程问题,是吗? –

+1

systemd日志应该记录了它的所有输出。尝试'journalctl -u备份' –

+1

并且记住,您不必重新启动即可尝试运行systemd作业。首先让它使用'systemctl start backup'。 –

回答

1

解决的家伙。有两个问题:

1 - 我必须更改服务单元文件才能使服务仅在网络启动后运行。该单元部分改为:

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

2 - root用户没有足够的远程主机添加到已知主机列表,不像我用来测试脚本的普通用户。