系统脚本失败

问题描述 投票:0回答:2

我想在系统启动时在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'.

可能有什么不对?

linux bash systemd
2个回答
1
投票

解决了家伙。有2个问题:

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

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

2 - root用户没有将远程主机添加到已知主机列表,这与我用于测试脚本的普通用户不同。


0
投票

结果'退出代码'失败,您可以在最后一行尝试此操作:

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

您可能还需要添加:

Type=forking

到类似于:https://serverfault.com/questions/751030/systemd-ignores-return-code-while-starting-service的systemd条目

如果您的服务或脚本没有fork,请在后台添加&以在后台运行它,并以0快速退出。否则它将像一个启动时间超时并永远需要/看起来像冻结服务。

© www.soinside.com 2019 - 2024. All rights reserved.