ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

crontabで第?曜日にタスクを実行する方法

crontabで第?曜日にタスクを実行する方法を紹介します。

サンプル

日曜日にシャットダウンを実行する場合の例です。

# 第1日曜日(5月)
0 0 1-7 5 * [ "$(date '+\%w')" -eq 0 ] && /sbin/shutdown -h now
# 第2日曜日(8月)
0 0 8-14 8 * [ "$(date '+\%w')" -eq 0 ] && /sbin/shutdown -h now
# 第3日曜日(9、11、12月)
0 0 15-21 9,11-12 * [ "$(date '+\%w')" -eq 0 ] && /sbin/shutdown -h now
# 第4日曜日(どの月でも)
0 0 22-28 * * [ "$(date '+\%w')" -eq 0 ] && /sbin/shutdown -h now
# 第5日曜日(どの月でも)
0 0 29-31 * * [ "$(date '+\%w')" -eq 0 ] && /sbin/shutdown -h now

解説

日時

先頭の0 0 8-14 8 *はcrontabの分、時、日、月、曜日の指定です。
曜日を指定しないのがミソです。

コマンド

日時指定の後に実際に実行するコマンドを定義します。

[ "$(date '+\%w')" -eq 0 ]は、日付を取得し、そのときの曜日が日曜日(0)だったらという条件になっています。
曜日の変更は、crontabの日時設定の所で行うのではなく、コマンド内の条件部分で行います。

&&は、前の条件が満たされたら次のコマンドを実行する条件分岐の判定文法になっています。

条件が満たされたら、/sbin/shutdown -h nowを実行し、シャットダウンを行います。


週ごとの区切りの日付を次のように定義します。

第1週 1-7
第2週 8-14
第3週 15-21
第4週 22-28
第5週 29-31


曜日の定義は次の通りです。

1
2
3
4
5
6
7または0


新しいLinuxの教科書

新しいLinuxの教科書

Linuxシステム[実践]入門 (Software Design plus)

Linuxシステム[実践]入門 (Software Design plus)