この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "Cron"
croncronの使用例
開発元AT&Tベル研究所
初版1975年5月 (49年前) (1975-05)
プログラミング
言語C言語
対応OSUnix、Unix系、Plan 9、Inferno
種別ジョブ管理システム
テンプレートを表示
cronは、Unix系オペレーティングシステムのジョブ管理ツールである。cronジョブ[1][2](コマンドまたはシェルスクリプト)を予約すると[3]、指定した日時または間隔でジョブを実行する[4]。cronは、主にシステムの管理・維持を自動化する目的で使用されるが、一定の間隔でファイルや電子メールをインターネットからダウンロードするなどの用途にも応用できる[5]。
cronは、反復的なタスクを予約するのに有用である。一度だけ実行するタスクの予約には、atコマンドを使用する。
名称は、「時間」を指すギリシア語の単語「chronos」に由来する[6]。 cronの動作は、crontab(cron table)ファイルで指定する。crontabは、一定のスケジュールで定期的に実行するシェルコマンドを指定する設定ファイルである。crontabファイルには、ジョブの一覧と、その他のcronデーモンへの指示が記録される。ユーザーは自分のcrontabを作成することができ、通常それとは別に、管理者のみが編集できるシステム全体のcrontabファイルが/etcまたはそのサブディレクトリ(例: /etc/cron.d)に存在する[7]。 各行は、次の形式でジョブを定義する。# ┌───────────── 分(0?59)# │ ┌───────────── 時(0?23)# │ │ ┌───────────── 日(1?31)# │ │ │ ┌───────────── 月(1?12)# │ │ │ │ ┌───────────── 曜日(0?6〈日?土〉、一部のシステムでは7も日曜日)# │ │ │ │ │# │ │ │ │ │# * * * * * [予約するコマンド] 各行は、コマンドを実行するタイミングを指定する5つの欄に続いて、実行するシェルコマンドを記入するという形式を取る。 通常、日時指定欄がすべて現在の日時と一致する場合にジョブが実行されるが、日(3つ目の欄)と曜日(5つ目の欄)の両方が指定されている(*ではない)場合、どちらかのみ一致する場合にもジョブが実行される[8]。 例えば、以下は、cronのユーザーのデフォルトのシェルがBourne shellの場合に、Apacheのエラーログを毎日深夜から1分経過後に消去するジョブである。1 0 * * * printf "" > /var/log/apache/error_log また、以下は、export_dump.shを毎週土曜日23時45分に実行するジョブである。45 23 * * 6 /home/oracle/scripts/export_dump.sh 一部のシステムでは、*/nを指定して、n日・時間・分ごとにジョブを実行することができる。また、コンマを使って複数の時間間隔を指定することもできる(例: 1,2,3)。例えば、以下の行は、1時から3時55分まで5分ごと(1時0分、1時5分、1時10分、…3時55分)にコマンドラインに「hello world」を出力する。*/5 1,2,3 * * * echo hello world 各ユーザーは、実際に設定ファイルが保存されている場所によらず、crontab -eを呼び出して自分の設定ファイルを編集できる。 多くのLinuxディストリビューションにインストールされているポール・ヴィクシーのBSD版cron実装は、ジョブを実行するアカウントのユーザー名を指定する6番目の欄を追加する。これは、システムのcrontabでのみ許可され、各ユーザーが単独で設定するよう割り当てられたその他のファイルでは使用できない。また、WindowsのnnCronデーモンなど、6番目の欄をアカウントのユーザー名ではなく年の指定に使うものもある。 Amazon EventBridgeのcron実装では、0を基底とせず、日曜日から土曜日まで1?7で曜日を指定し、月の最初の平日や月末などを指定する追加の機能を持つ[9]。 一部のcron実装[10]は、以下の非標準のマクロをサポートしている。 マクロ説明等価の表現 @rebootを指定すると、デーモン起動時にジョブが1回実行される。cronは通常再起動されることがないため、これは通常マシンの起動時と一致する。Debian版のcronなど、一部の種類のcronはマシンの起動時にのみ実行するよう設計されており[11]、デーモンの再起動時には@rebootのジョブが再実行されないようになっている。 @rebootは、特定のユーザーでサーバーやデーモンを起動する必要があり、ユーザーがプログラムを起動するようinitを設定する権限がない場合に有用である。 次の2つのファイルは重要な役割を担っている。 どちらのファイルも存在しない場合、サイト固有の設定パラメーターにより、スーパーユーザーのみがcronジョブを使用できるか、すべてのユーザーがcronジョブを使用できるかが決定される。 多くのcron実装は、crontabの項目をcronデーモンが実行されているシステムのタイムゾーンの設定に基づいて解釈する。複数のユーザー向けの大規模なマシンで、ユーザーが地理的に複数のタイムゾーンに分散しているケースで、特にシステムのデフォルトのタイムゾーンが混乱を招くおそれのある夏時間を採用している場合、これは問題となる場合がある。このため、cron実装の中には、ユーザーのcrontabのCRON_TZ=[タイムゾーン]の形式を取る行を認識して、その行以降のcrontabの項目を指定されたタイムゾーンに基づいて解釈するものもある[12]。 cronの式は、時間を指定するホワイトスペースで区切られた5つまたは6つの欄の文字列で[13]、特定の作業を予約する。 コメントは#で始まる。 欄必須許容される値許容される特殊文字備考 JAN?DEC* , - SUN?SAT* , - ? L #? L # は一部の実装でのみ許容される。 月と曜日の省略記法は大文字・小文字が区別されない。 システムのcrontabファイル(/etc/crontab)には、コマンドを指定する欄の直前にユーザー名を指定する欄が存在する。この欄は通常rootに設定される。 また、一部の実装では、行の最初に秒の指定欄が存在する場合もある。この場合、各行に6つまたは7つの欄が存在することになる[14]。 以下は、Javaのジョブ管理ツールQuartzなど、一部のcron実装にのみ存在する非標準の文字である。
概要
非標準のマクロ
@yearly(@annually)毎年1月1日の0時0分に実行0 0 1 1 *
@monthly毎月1日の0時0分に実行0 0 1 * *
@weekly毎週日曜日の0時0分に実行0 0 * * 0
@daily(@midnight)毎日0時0分に実行0 0 * * *
@hourly毎時0分に実行0 * * * *
@reboot起動時に実行N/A
cronのパーミッション
/etc/cron.allow ? このファイルが存在する場合、cronジョブを使用するにはユーザー名がこのファイルに含まれている必要がある。
/etc/cron.deny ? cron.arrowファイルが存在せず、cron.denyファイルが存在する場合、cronジョブを使用するにはユーザー名がcron.denyファイルに含まれていない必要がある。
タイムゾーンの処理
式
分Yes0?59* , -
時Yes0?23* , -
日Yes1?31* , - ? L W? L Wは一部の実装でのみ許容される。
月Yes1?12
曜日Yes0?6
年No1970?2099* , -この欄は標準・デフォルトの実装ではサポートされない。
アスタリスク(*)
アスタリスク(ワイルドカード)は「すべて」を表す。例えば、* * * * *を指定すると、ジョブが毎分実行される。* * * * 1を指定すると、ジョブが月曜日にのみ毎分実行される。秒の指定に対応している場合、アスタリスクを6個指定するとジョブが毎秒実行される。
コンマ(,)
コンマは、値を複数指定するのに使う。例えば、5番目の欄でMON,WED,FRIは「月曜日・水曜日・金曜日」を指す。
ハイフン(-)
ハイフンは範囲を表す。例えば、2000-2010は、2000年から2010年までのすべての年を指す。
パーセント(%)
コマンド内のパーセント(%)は、バックスラッシュ(\)でエスケープされていない場合、改行文字に変換され、最初の%以降のデータが標準入力としてコマンドに渡される[15]。
非標準文字
L
Lは「最後の(last)」を意味する。曜日欄で、「最後の金曜日」(5L)などを指定するのに使う。日欄では、月の最終日を指定するのに使う。
W
Wは、日欄で使用でき、その日に最も近い平日(月曜日?金曜日)を指定できる。例えば、15Wと記入すると、15日に最も近い平日が指定され、15日が土曜日であれば、14日(金曜日)にジョブが実行される。また、15日が日曜日であれば、16日(月曜日)に実行される。15日が火曜日であれば、そのまま15日(火曜日)に実行される。ただし、日欄に1Wを指定し、1日が土曜日であった場合、ジョブは月を跨がず3日(月曜日)に実行される。Wは、日の範囲指定や一覧指定には使用できない。
ハッシュ(#)
#は、曜日欄で使用でき、この記号に続いて1?5の数字を指定する。月の「第2金曜日」などを指定するのに使う[16]。例えば、5#3と記入すると、毎月第3金曜日にジョブが実行される。
クエスチョンマーク(?)
一部の実装では、月・曜日欄を空欄にする際に*の代わりに?を使う。その他の実装では、?がデーモンが起動した時間に置き換えられる。例えば、デーモンが午前8時25分に起動した場合には? ? * * * *が25 8 * * * *と解釈され、再起動されるまで毎日この時間に実行される[17]。
Size:26 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef