cronの日時指定を、基礎から学ぶ(分,時,日,月,曜日の指定、◯分ごと、月末起動、など)
こんにちは、@yoheiMuneです。
今日は、cronの時間指定について基礎〜応用まで、ブログに書きたいと思います。
曜日には「0:日曜日 〜 6:土曜日」を指定します。
上記ロジックをcronで記述すると、下記となります。
最後になりますが本ブログでは、サーバー、Python、フロントエンド、インフラ、PHP、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、cronの時間指定について基礎〜応用まで、ブログに書きたいと思います。
目次
cronの基本
cronは「* * * * *
」の5箇所を指定して、起動時間を設定します。左から「分」「時」「日」「月」「曜日」を指定します。# cronの起動時間設定 * * * * * (起動したい処理) | | | | | | | | | |- 曜日 | | | |--- 月 | | |----- 日 | |------- 時 |--------- 分上記5箇所に値を設定することで、様々なタイミングで処理を起動できます。
起動時間の書き方(基本編)
ここではまず、基本的な時間指定の方法を見ていきたいと思います。1分毎に起動する
すべての箇所に*
を指定した場合、1分毎に処理が起動されます。# 1分毎に起動する * * * * * echo 'hello'
毎時◯分に起動する
「分」に数字を指定すると、毎時◯分で処理を起動できます。# 毎時0分 0 * * * * echo 'hello' # 毎時10分 10 * * * * echo 'hello'また、カンマ区切りで複数指定したり、ハイフンを用いて範囲指定もできます。
# 毎時10分と30分(カンマで複数指定も可) 10,30 * * * * echo 'hello' # 毎時00〜10分に、1分毎に起動(ハイフンで範囲指定も可) 0-10 * * * * echo 'hello'
毎日◯時に起動する
「時」「分」の2箇所を指定すると、日次(Daily)で起動できます。# 毎日1時00分 0 1 * * * echo 'hello' # 毎日1時と3時に、00分に起動(カンマで複数指定も可) 0 1,3 * * * echo 'hello' # 毎日1時〜6時まで、00分に起動(ハイフンで範囲指定も可) 0 1-6 * * * echo 'hello'1つ注意するべきことは、分を「
*
」にした場合、指定した時間(1時など)に1分毎に処理が起動してしまいます。# 毎日1時台に1分ごとに起動してしまう(00分起動の設定と間違えやすい・・) * 1 * * * echo 'hello'上記は意図しない設定のことが多いので、注意が必要です。
毎月◯日に起動する
「日」「時」「分」の3箇所を指定すると、月次(Monthly)で起動できます。# 毎月3日の4:10に起動 10 4 3 * * echo 'hello' # 毎月3日と13日の、4:10に起動(カンマで複数指定も可) 10 4 3,13 * * echo 'hello' # 毎月3〜5日の4:10に起動(ハイフンで範囲指定も可) 10 4 3-5 * * echo 'hello'
毎週◯曜日に起動する
「曜日」「時」「分」を指定すると、週次(Weekly)で起動ができます。曜日には「0:日曜日 〜 6:土曜日」を指定します。
# 毎週月曜日の午前10:00に起動 0 10 * * 1 echo 'hello' # 毎週月,水曜日の午前10:00に起動(カンマで複数指定も可) 0 10 * * 1,3 echo 'hello' # 毎週月〜金曜日の午前10:00に起動(ハイフンで範囲指定も可) 0 10 * * 1-5 echo 'hello'
毎年◯月◯日に起動する
年に1度しか動かない処理は少し怖いですが、「月」「日」「時」「分」を指定すると、年次(Yearly)で起動できます。# 毎年1月3日の10:00に起動 0 10 3 1 * echo 'hello'
起動時間の書き方(応用編)
基本編の記述ができれば、ほとんどの要件に対応できますが、cronでは下記のような設定も可能です。10分ごとや2時間ごとに起動する
時間指定で「*/10
」のような指定をすると、10分毎、2時間毎、1日おき、などの指定が可能です。# 10分ごとに起動する */10 * * * * echo 'hello' # 2時間ごとに起動する(0時、2時、4時、...) 0 */2 * * * echo 'hello' # 2時間ごとに起動する(1時、3時、5時、...) 0 1-23/2 * * * echo 'hello' # 1日おきに起動する 0 0 */2 * * echo 'hello'
月初に起動したい
月次(Monthly)指定で、「1日」を指定すると月初に起動できます。# 月初の午前2:00に起動 0 2 1 * * echo 'hello'
月末に起動したい
cronでは、月末を指定できません。月末が28日なのか、31日なのか、カレンダーによるからです。月末に処理を起動したい場合、下記のロジックで処理を行います。28〜31日に処理を起動し、翌日が1日であるかをチェックし、それがTrueの場合には処理を行う。
上記ロジックをcronで記述すると、下記となります。
# 月末の00:00に処理を起動(翌日が1日かをチェックして、trueなら、処理を実行する) 0 0 28-31 * * /usr/bin/test $(date -d '+1 day' +%d) -eq 1 && [実行したいコマンド]「
/usr/bin/test
」のパスと、「date -d '+1 day' +%d
」の書き方は、Linuxの種類により異なる場合があります。動かなかったら調整してください。最後に
今日はcronのいろいろな書き方をまとめました。cronを使うことは多いですが、僕はなんとなく使っていた派でした。ちゃんと学んでみよう〜と思い、今回のブログを書きました。最後になりますが本ブログでは、サーバー、Python、フロントエンド、インフラ、PHP、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!