Scripting

以程式方式向 crontab 添加內容(通過 ssh)

  • March 16, 2022

我有一個部署腳本,它必須向使用者添加一些內容crontab(觸發一個每隔 XXX 天清理一次日誌的腳本),但這只能在第一次部署期間或需要更新時完成。

(我可以跑步xxx.py deploy envxxx.py update env

所以我必須這樣做:

Check if my cronJob already exist
Put my cronJob if it does not already exist
or
update my cronjob if one of the parameter of the command is different

我看不到如何在crontab不使用crontab -e或編輯crontab文件的情況下添加/檢查/刪除某些內容(下載、重寫、重新上傳)

PS:這是一個使用者特定的 cronjob,“webadmin”會這樣做,他不應該使用 sudo 來做。

到目前為止我最好的主意

首先檢查內容是否與應包含的內容匹配,如果不匹配則僅更新:

if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q 'some_command'; echo $?) == 1 ]]
then
   set -f
   echo $(crontab -l ; echo '* 1 * * * some_command') | crontab -
   set +f
fi

但這變得足夠複雜,無法圍繞該 cron 任務建構一個單獨的腳本。

其他想法

您可以通過標準輸入將字元串發送到 crontab(請注意,這會清除任何以前的 crontab 條目):

echo "* 1 * * * some_command" | crontab -

這甚至應該通過 ssh 正常工作:

echo "* 1 * * * some_command" | ssh user@host "crontab -"

如果你想附加到文件,你可以使用這個:

# on the machine itself
echo "$(echo '* 1 * * * some_command' ; crontab -l 2>&1)" | crontab -
# via ssh
echo "$(echo '* 1 * * * some_command' ; ssh user@host crontab -l 2>&1)" | ssh user@host "crontab -"

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