Pages

2017年4月17日月曜日

cron操作

しばらくぶりです。例の新人です。

今回は、備忘録としてcronの使い方について学んだことを記述します。

cronは、ジョブ(1つ以上のコマンド(プロセス)が動いてひとまとまりの処理になっている場合の基本単位)、スクリプト(ソースコードを記述したら即座に実行できるようなプログラム)を自動実行するためのデーモン(UNIX系OSにおける、メモリに常駐して様々なサービスを提供するソフトウェア)プロセスです。

cronの状態は、以下のコマンドで確認できます。

ps aux | grep cron

psコマンドは、Linuxで現在実行しているプロセスを表示するコマンドであり、auxは端末操作のプロセス(a)、CPUやメモリの使用率(u)、端末操作以外のプロセス(x)を表示するオプションです。また、grepコマンドは指定したパターンにマッチする行を表示するコマンドです。この2つをパイプ(|)を使って併用し、cronが起動しているかどうかを確認できます。

また、以下のコマンドでもcronの状態を確認することができます。

/etc/init.d/cron status
または
service cron status

cronが動作していない場合は、以下のコマンドでcronを起動させます。

service cron start

cronの編集は、crontabコマンドから行います。オプションには、以下のものがあります。

-u (ユーザ名):指定したユーザのcrontabファイル操作。管理者ユーザでのみ使用可能。
-l:crontabファイルの内容を表示。
-l > (作成するファイル名):crontabファイルの内容を、指定したファイル名でコピーする。
-e:crontabファイルを編集する。操作方法はviコマンドと同様。
-r:crontabファイルを削除。上の「-e」オプションのeキーのすぐ隣である上に、削除時に一切警告がされないため、編集する際に誤ってこのオプションに設定してコマンドを実行しないように注意。

上述の通り、操作ミスで編集するつもりが削除してしまったという事態になることを避けるため、編集する際は「crontab -l > (作成するファイル名)」であらかじめバックアップを取っておく方がいいようです。

crontabファイルの書式は、以下の通りです。

(分) (時) (日) (月) (曜日) (コマンド)

(分):分を0〜59で指定し、指定した分ごとに実行します。*を指定すると、毎分ごとに実行します。
(時):時刻を0〜23で指定し、指定した時刻ごとに実行します。*を指定すると、毎時ごとに実行します。
(日):日を1〜31で指定し、指定した日ごとに実行します。*を指定すると、毎日実行します。
(月):月を1〜12、またはjan〜decで指定し、指定した月ごとに実行します。*を指定すると、毎月実行します。
(曜日):曜日を0〜7(0と7は日曜日)またはsun〜satで指定し、指定した曜日ごとに実行します。*を指定すると、毎日実行します。
(コマンド):実行したいコマンドやシェル(主にそれらのフルパス)を指定します。

また、これらは以下のように特殊な指定をすることができます。
リスト指定:カンマで区切った指定ごとに処理を実行します。例えば、(分)の指定において「0,10,20,30,40,50」と指定すると、10分おきに実行します。
範囲指定:ハイフンで繋いだ値の期間で処理を実行します。例えば、(曜日)の指定において「1-5」と指定すると、月曜日から金曜日に処理を実行します。
間隔指定:範囲指定直後のスラッシュの後ろに指定した値の間隔で処理を実行します。例えば、(月)の指定において「4-8/2」と指定した場合、4月、6月、8月に実行します。リスト指定の「4,6,8」と同意です。

使用例
0-55/5 9-18 * 7,8 1-4 /home/testowner/test.php

上の例では、7月と8月の毎日、月曜日から木曜日までの間、午前9時から午後6時まで5分ごとに「test.php」を実行します。

2017/0705 crontabコマンドによるcron編集の説明が「cronの編集は、cronコマンドから行います。オプションには、以下のものがあります。」となっていたため、crontabコマンドに修正