我正在尝试从 切换到cron
来systemd
完成一件非常简单的事情。我有一个小的 bash 脚本sync_org_git
,它基本上 cd-s 到特定的文件夹中,进行一些 git 操作。 git 命令会写入一些内容stdout
(未跟踪的文件、提交后的反馈等),这对于 git 来说没有什么异常,但systemctl --user start sync-org-git.timer
表示作业失败。我需要修改我的脚本或 systemd 文件吗?
这是服务和计时器文件:
❯ cat sync-org-git.service
[Unit]
Description=sync org to git
[Service]
ExecStart=/home/fbence/bin/sync_org_git
❯ cat sync-org-git.timer
[Unit]
Description=Sync org git timer
Requires=sync-org-git.service
[Timer]
OnBootSec=0min
OnCalendar=*:*:0/5
Unit=sync_org_git.service
[Install]
WantedBy=multi-user.target
更新
使用ExecStart=-/home/fbence/bin/sync_org_git
结果是
sync-org-git.timer: Refusing to start, unit sync_org_git.service to trigger not loaded.
但我实际上在日志中看到了 shell 脚本的输出。
答案1
如果您的命令以非零返回代码退出,则 systemd 会将其视为运行失败。您可以通过添加-
前缀(如 )来忽略返回代码ExecStart=-/home/fbence/bin/sync_org_git
,也可以添加额外的行来列出返回代码的含义,例如:
SuccessExitStatus=0 1 7