bash 腳本向 crontab 添加作業的正確方法是什么,例如
- 不會有重復的作業
- crontab 檔案不會被重新呼叫
- (可選)接近單線
在下面遇到了這個解決方案,但它不影響運行crontab -l.
grep 'some_user python /mount/share/script.py' /etc/crontab || echo '*/1 * * * * some_user python /mount/share/script.py' >> /etc/crontab
嘗試將其轉換為影響crontab -l,
(crontab -l | grep '/mount/share/script.py') || { crontab -l; '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; } | crontab -
但運行此命令會出現錯誤:
-bash: */1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1: No such file or directory
uj5u.com熱心網友回復:
但運行此命令會出現錯誤:
-bash: */1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1: No such file or directory
編碼:
(crontab -l | grep '/mount/share/script.py') || { crontab -l; '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; } | crontab -
將嘗試執行/運行:
'*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'
如果grep失敗。
在它或 printf 前面添加一個 echo,因為crontab期望來自 的輸入stdin,就像您在第一個示例/代碼中所做的那樣,例如:
(crontab -l | grep '/mount/share/script.py') || { crontab -l; echo '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; } | crontab -
這是一個替代方案,它是一個完整的腳本。
#!/usr/bin/env bash
cron_entry=$(crontab -l 2>&1)
is_in_cron='/mount/share/script.py'
new_cron_entry='*/1 * * * * some_user python /mount/share/script.py >> /tmp/foo/logs/foo.cron.log 2>&1'
if [[ $cron_entry != *"$is_in_cron"* ]]; then
printf '%s\n' "$cron_entry" "$new_cron_entry" | crontab -
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/361769.html
