Scripting
以程式方式向 crontab 添加內容(通過 ssh)
我有一個部署腳本,它必須向使用者添加一些內容
crontab
(觸發一個每隔 XXX 天清理一次日誌的腳本),但這只能在第一次部署期間或需要更新時完成。(我可以跑步
xxx.py deploy env
或xxx.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 -"