
我有一個 cron 作業,應該每天凌晨 2 點觸發 shell 腳本。
0 2 * * * /root/bin/script.sh
然而它根本不起作用。我缺什麼?
更多詳細資訊:手動運行時,腳本無需 cron 調度即可正常運行,並執行其應執行的操作。 root 使用者正在執行 cron 作業。 cron 作業是由使用者安排crontab -e
的root
。pgrep cron
給予一個服務 ID,這表示 cron 服務正在運行。以下是文件內容/root/bin/script.sh
:
BACKUP_LOG=/var/log/backup.log
exec 1> >(while IFS= read -r line; do echo "$(date --rfc-3339 ns) $line"; done | tee -a ${BACKUP_LOG}) 2>&1
# Back up the etc directory
mkdir /home/directory1/backup/etc_backup
cp -Lrp /etc /home/data/backup/etc_backup
tar czf /home/data/backup/etc_backup.tgz
/home/data/backup/etc_backup
rm -rf /home/data/backup/etc_backup
實際上我將腳本從/etc/cron.daily/
移至/root/bin
.該腳本是否應該/etc/cron.daily
僅用於日常執行?
答案1
我的猜測是 shell 無法正確理解您的腳本,因為它沒有任何正確的 shebang。試著用crontab -e
這個來代替:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
透過使用 bash 直接呼叫腳本,腳本現在應該可以正常運作。任何輸出最終都應該被記錄下來/tmp/crontest.log
,如果它仍然不起作用,這可能會對調試有所幫助。