【发布时间】:2017-10-12 20:33:21
【问题描述】:
我想在系统启动时在 Debian 9 机器中运行一个脚本。我的脚本在独立运行时有效,但在 systemd 下失败。
我的脚本只是将备份文件从远程服务器复制到本地机器:
#!/bin/sh
set -e
/usr/bin/sshpass -p "PASSWORD" /usr/bin/scp -p USER@10.0.0.2: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'.
可能出了什么问题?
【问题讨论】:
-
systemd 日志应该已经记录了它的所有输出。试试
journalctl -u backup -
请记住,您不必重新启动即可尝试运行 systemd 作业。首先使用
systemctl start backup。 -
除了几个 SPECIFIERS(在
man systemd.unit中找到那个部分),systemd 确实不在单元文件中执行环境变量替换。 -
我会做的其他事情:在脚本中明确设置 PATH,或者对所有命令使用绝对路径。
-
@ZanLynx,我读到 OP 表明他们只是将问题替换为匿名化工作(“替换了上面的密码、用户和路径”),而且它确实是一个合法的绝对路径在正版代码中。