
毎日午前 2 時にシェル スクリプトをトリガーする cron ジョブがあります。
0 2 * * * /root/bin/script.sh
しかし、まったく機能しません。何が足りないのでしょうか?
詳細: スクリプトは、手動で実行すると cron スケジュールなしで正常に実行され、想定どおりに動作します。root ユーザーが cron ジョブを実行しています。cron ジョブはcrontab -e
asroot
ユーザーによってスケジュールされました。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
私の推測では、スクリプトには適切なシェバンがないため、シェルによってスクリプトが適切に理解されていないようです。crontab -e
代わりに、次のように使用してみてください:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
bash を使用してスクリプトを直接呼び出すと、スクリプトは正常に実行されるはずです。出力もすべてログに記録されるので/tmp/crontest.log
、まだ動作しない場合はデバッグに少し役立つかもしれません。