我正在尝试设置一个简单的systemd定时器,每天午夜运行一个bash脚本。
systemctl --user status backup.service
失败并记录以下内容:
backup.service: Failed at step EXEC spawning /home/user/.scripts/backup.sh: No such file or directory.
backup.service: Main process exited, code=exited, status=203/EXEC
Failed to start backup.
backup.service: Unit entered failed state.
backup.service: Failed with result 'exit-code'.
虽然文件和目录是存在的,脚本也是可执行的,我还把权限设置为了777,但我还是迷失了。
一些背景信息:
backup.timer
和 backup.service
单元文件位于 /home/user/.config/systemd/user
。
backup.timer
已加载并激活,目前正在等待午夜到来。
以下是它的样子:
[Unit]
Description=Runs backup at 0000
[Timer]
OnCalendar=daily
Unit=backup.service
[Install]
WantedBy=multi-user.target
这里是 backup.service
:
[Unit]
Description=backup
[Service]
Type=oneshot
ExecStart=/home/user/.scripts/backup.sh
[Install]
WantedBy=multi-user.target
最后,这是对backup.sh
的释义:
#!/usr/env/bin bash
rsync -a --delete --quiet /home/user/directory/ /mnt/drive/directory-backup/
如果我自己执行脚本,它能够正常运行。
不确定是否相关,但我使用fish作为我的shell(从.bashrc启动)。
如果有帮助的话,我可以发布完整的脚本。
ls
输出-rwxrwxrwx 1 dwrz dwrz 1470 Aug 11 01:57 /home/user/.scripts/backup.sh
。抱歉,脚本中的 shebang 中的拼写错误是我复制到这里时发生的。实际上应该是/usr/
。 - dwrz.bashrc
启动fish是一个非常糟糕的想法。更新您的/etc/passwd
条目以直接指定fish,不要混淆可能有意要运行交互式bash实例的程序,使其启动一个不同的、不兼容的shell。 - Charles Duffy/etc/passwd
中设置fish
,因为Arch Wiki建议不要这样做,但是我很感激你的提醒,我也会研究一下。目前我尝试了两件事:(1)在服务文件中指定PATH
,(2)在脚本中使用#!/bin/bash
(当我自己执行它时仍然可以正常运行)。我仍然遇到了与systemd相同的错误(确保已经daemon-reload
)。现在我要看一下sysdig
。 - dwrz