/etc/cron.d/cronjob

/etc/cron.d/cronjob

毎月最初の土曜日に実行されるように/etc/cron.d/からcronjobを取得しようとしています。

これが私が今まで持っているものです:

0 1 1-7 * 6 [`date +\%d` == 06] root && /home/test/cron-test.sh

システム日付を2017年1月14日深夜(2017年土曜日)に変更し、tail /var/log/syslog | grep cron-testレポートを確認しました。

Jan 14 00:59:21 Inspiron-1545 cron[936]: Error: bad username; while reading /etc/cron.d/cron-check1
Jan 14 00:59:21 Inspiron-1545 cron[936]: (*system*cron-check1) ERROR (Syntax error, this crontab file will be ignored)

私は何が間違っていましたか?

ベストアンサー1

システム全体のcrontabには、1行に5つの日付と時刻フィールドがあり、その後にcronjobを実行するユーザー名とコマンドラインが続きます。あなたの例では、時間フィールドは大丈夫に見えますが、6番目のフィールドは[`dateユーザー名には少し奇妙です。エラーメッセージはこれを意味します。

括弧内のコードスニペットの後にこれを言及したので、rootユーザー名を間違って入力したようです。したがって、次のことを行う必要があります。

0 1 1-7 * 6 root [`date +\%d` == 06] && /home/test/cron-test.sh

これには他のコマンドと同じ問題があるため、前後にスペースを使用する必要が[あります。そして比較の基準ではありません。また、コマンド置換の場合はバックティックよりも良いので、試してみましょう。[]===$(cmd)

0 1 1-7 * 6 root [ $(date +\%d) = 06 ] && /home/test/cron-test.sh

date +%dしかし、日付を知らせるのではなく、(平日に関係なく)その月の6日にのみ実行します。 3番目と5番目のフィールド(月と曜日)は少し奇妙に連携します。 cronjob は、次の場合に実行されます。誰でも一致します。しかし、私たちは土曜日にのみ実行し、毎月1〜7日にのみ実行しようとしているので、条件の1つを手動で確認する必要があります。

0 1 1-7 * * root [ $(date +\%u) -eq 6 ] && /home/test/cron-test.sh

cronjob自体は毎月最初の7日間実行されますが、[ $(date +%u) -eq 6 ]手動テストでは実際にデフォルトのコマンドを実行する前に曜日が土曜日であることを確認します。

(マンページの一部のバージョンにはcrontab(5)ほぼ同様の例がありますが、オンライン版が見つかりません。)

おすすめ記事