0

crontabコマンド 纏め

crontabコマンド

各ユーザーのcrontabファイルを編集・閲覧する

定期的に自動でジョブを実行する「cron」には、

2種類の設定ファイル(crontabファイル)

があります。

■①ユーザ用のcrontabファイル

/var/spool/cron/ユーザ名

ユーザ用のcronの設定を行うには crontab コマンドを使用。

■②システム用のcrontabファイル

/etc/crontab

viなどのテキストエディタで直接編集。
ユーザ用のcrontabファイルの書式と異なり、各コマンドの実行ユーザも指定する必要アリ。

■書式

crontab [オプション]

crontabファイルには、指定した日時や定時に実行するコマンドやスクリプトが記録されています。
スケジュールされたコマンドやスクリプトは、cronデーモンと呼ばれるバックグラウンドで動いているプログラムによって実行されます。

■オプション

-e	crontabファイルの編集を行います。環境変数EDITORで指定されているエディタが起動します。
-l	crontabファイルの内容を表示します。
-r	crontabファイルを削除します。コマンドを実行すると否応なし(削除しますか?といった対話はありません)にcrontabファイルが削除されるので実行には注意が必要です。
-u ユーザー	指定したユーザーのcron設定を行います。rootのみが使用できるオプションです。

■crontabの書式

crontabの書式は、以下のように「分」「時」「日」「月」「曜日」「実行ユーザ(システムcrontabのみ要)」「コマンド」を半角スペースで区切って指定します。行頭に「#」が記載された行は、コメントになります。

# コメントアウト
書式
分 時 日 月 曜日 ​実行ユーザ名(システム用設定ファイルでのみ指定) コマンドやスクリプト
分	  1桁、あるいは2桁の数字(0〜59)。ワイルドカード(*)を指定すると毎分。
日	  1桁、あるいは2桁の数字(0〜23)。ワイルドカード(*)を指定すると毎時。
月	  1桁、あるいは2桁の数字(1〜12)。または、3文字のテキスト(jan、decなど)。ワイルドカード(*)を指定すると毎月。
曜日	  1桁の数字(0〜7)、0と7は日曜日。または、3文字のテキスト(sun、monなど)。ワイルドカード(*)を指定すると毎日。
実行ユーザ コマンドを実行するユーザ(*システムcrontabのみ)
コマンド   コマンドやスクリプト 	実行するコマンドやスクリプトを指定。

日時の指定には「リスト」「範囲」「共存」「間隔」といった指定方法も可能です。
リスト	1,3,8	「月」を指定した場合、1月、3月、8月に実行します。
範囲	10-12	「時」を指定した場合、10時、11時、12時に実行します。
共存	3,5,50-52	「分」を指定した場合、3分、5分、50分、51分、52分に実行します。
間隔	*/5	「分」を指定した場合、5分間隔に実行します。

■crontab -e のサンプル

$ crontab -e
# 以下の例では「tarコマンド」で、毎週月曜日の朝5時に/home/user/ディレクトリをバックアップするように設定。
# バックアップ
0 5 * * 1 tar -zcf /var/backups/user.tgz /home/user/

# 設定したcrontabを確認(オプション -l)。
$ crontab -l
# バックアップ
0 5 * * 1 tar -zcf /var/backups/user.tgz /home/user/

■/etc/crontab のサンプル

0 5 * * 1 root tar -zcf /var/backups/user.tgz /home/user/ >> /var/log/backup.`date +\%Y\%m\%d` 2>&1

●オシャレな使い方

cron(crontab)で月末指定で実行

毎月28~31日の間にtestコマンドで月末かどうかをチェック

55 23 28-31 * * /usr/bin/test `date -d '+1 day' +%d ` -eq 1 && echo 'Go HACHIM!

最終金曜日のみ実行

cron的には毎週金曜日testコマンドで判別をしている、最終金曜日の判定はtestコマンドにて実行

0 0 * * 5 /usr/bin/test `date +\%m` -ne `date --date '7 day' +\%m` && echo 'Go HACHIM!'

%をエスケープする必要があります。詳細は man 5 crontab を!

なお、crontabファイルの編集内容は、crondを再起動させることなくシステムに反映されます。
crondが /var/spool/cron ディレクトリ内のファイル(ユーザ用)や /etc/crontab ファイル(システム用)の更新履歴を1分ごとにチェックし、変更があるファイルを再読み込みするためです。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です