次のcronjobが動作しなくなった理由を理解するのに少し難しいことがあります。
30 3 * * * /path/to/backup_script.sh && tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$(date '+%Y%m%dT%H%M%S').tar.gz -C /path/to/source/backup/folder/ .
crontabを所有しているのと同じユーザーを使用して手動で実行すると機能します。数日前に編集しましたが動作が停止しました。&& tar -czvf [...]
コマンドを別々に呼び出す必要がありますかdate
?それとも脱出$
(今テストしようとしているのに気づきました)?
David Sánchez Martínのおかげで、次のエラーを報告する特定のログが見つかりました。
/bin/sh: 1: Syntax error: Unterminated quoted string
答え1
これらの%
記号は項目内で特別なので、書式文字列では直接使用crontab
できません。date
man 5 crontab
書く
6番目のフィールド(行の残りの部分)は、実行するコマンドを指定します。行の完全なコマンド部分(改行文字または文字まで)は、cronfile変数で指定されたシェルによって実行されます
%
。バックスラッシュ()でエスケープしない限り、コマンドのパーセント記号()は改行文字に変更され、最初の後のすべてのデータは標準入力としてコマンドに送信されます。/bin/sh
SHELL
%
\
%
答え2
最初にこれをデバッグして監視するには、経験的にMAILTO変数をcrontabに追加すると、標準エラーで問題が発生した場合に電子メールが届きます。
# crontab -e
[email protected]
30 3 * * * /usr/local/bin/blahblah.sh
また、コマンドが標準出力に何かを出力する場合、メールで出力したくない場合はnullにリダイレクトできます。
30 3 * * * /usr/local/bin/blahblah.sh > /dev/null
その後、コマンドがわからない場合は、次のように日付を変数として入力します。
30 3 * * * /path/to/backup_script.sh && THEDATE=$(date +%Y%m%dT%H%M%S) tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$THEDATE).tar.gz -C /path/to/source/backup/folder/ .
私はそれがより読みやすく、周りに隠れている変数がないと思います。