Systemd

systemd 服務因 git 命令而失敗

  • August 12, 2022

我正在嘗試從 to 切換cronsystemd一個非常簡單的事情。我有一個小的 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 腳本的輸出。

如果您的命令以非零返回碼退出,則 systemd 將此視為執行失敗。您可以通過添加-前綴來忽略返回程式碼 in ExecStart=-/home/fbence/bin/sync_org_git,或者您可以添加額外的行列出返回程式碼的含義,例如:

SuccessExitStatus=0 1 7

引用自:https://unix.stackexchange.com/questions/713405