crontabは定期的にジョブを実行するようスケジュールするcronを設定するコマンドだ。
定期的なログの取得などに活用できる。
このページでは、次のようなプロセスの実行状況をテキストファイルlogdata.txtに蓄積するシェルを定期的に動作させる方法を紹介する。
シェルファイルpslog.sh
date >> logdata.txt //取得時間の記録
ps -a >> logdata.txt //プロセス情報の記録
シェルファイルpslog.shはあらかじめ次のchmodコマンドにて実行権限を付与しておく。
$ chmod 755 pslog.sh
この時点で、コマンドラインから次のように入力すればpslog.shが実行される状態となっている。
$ ./pslog.sh
さらに、指定するジョブの絶対パスも調べておこう。
今回のファイルpslog.shの絶対パスを調べるには、現在のディレクトリの絶対パスを格納している環境変数$PWDを使って次のコマンドで調べることができる。
$ ls -ld $PWD/pslog.sh
絶対パスが/home/vagrant/pslog.shであることがわかった。
目次
crontabコマンドのオプションたち
crontabコマンドは、オプションが必ず必要だ。
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -e
cronを設定する
オプション -l
設定されているcronを表示する
オプション -r
cronを削除する
オプション -u
ユーザーを指定する。
-eオプション:cronを設定する
cronを設定するためにエディタでcronの設定ファイルを読み出す。書式は次のとおりだ。
$ crontab -e
すると、エディタが開き、cronを編集できる状態になった。
この例ではエディタviでcron設定ファイル/tmp/crontab.S8aqdW/crontabが開いた。
スクロールし、最終行に移動しcron設定を記述する。
cronの設定
cronの設定は、実行時間とジョブを半角空白を空けて記録する。
実行時間は、分、時、日、月、曜日を指定し、こちらも半角空白を空けて記録する。
時は24時間表記、曜日は0から6まで日曜日から土曜日までに対応し、さらに7はまた日曜に対応する。
数字の代わりに*を入力すると指定しないことになる。
毎月20日の23:59に、シェルスクリプト/home/vagrant/work.shを実行させるには次の書式だ。
59 23 20 * * ./home/vagrant/work.sh
毎週金曜日の17:00に、シェルスクリプト/home/vagrant/weekly.shを実行させるには次の書式だ。
00 17 * * 5 ./home/vagrant/weekly.sh
/5と表記すると間隔5を表すことができる。
例えば、5分おきに、シェルスクリプト/home/vagrant/work.shを実行させるには次の書式だ。
*/5 * * * * ./home/vagrant/work.sh
毎日の11時と23時に、シェルスクリプト/home/vagrant/work.shを実行させるには次のように2行併記する。
0 11 * * * ./home/vagrant/work.sh
0 23 * * * ./home/vagrant/work.sh
今回は、毎日のお昼12時に、シェルスクリプト/home/vagrant/pslog.shを実行させるため、次のような表記とする。
0 12 * * * ./home/vagrant/pslog.sh
保存し、コマンドプロンプトに戻るときにエラーチェックが行われ、正常であればinstalling new crontabとメッセージが表示される。
エラーがあれば更新せずエラーメッセージを表示する。
設定内容にエラーがあるとこのような表示になる。
-lオプション:設定されているcronを表示する
設定されているcron表示する。書式は次のとおりだ。
$ crontab -l
cron設定の内容が表示された。
-rオプション:cronを削除する
設定されているcronを削除する。
cronが複数設定されている場合は、すべて削除するので注意しよう。
書式は次のとおりだ。
$ crontab -r
cronの設定が削除された。
一部だけ削除する場合は、-eオプションで編集し、削除しよう。
-uオプション:ユーザーを指定する
rootでcrontabコマンドを実行する場合は、-uオプションでユーザー名を指定できる。
書式は次の通りだ。
$ crontab -u ユーザー名
ユーザーvagrantに設定されているcron内容を表示するには次のコマンドだ。
$ crontab -u vagrant -l
rootでvagrantの設定内容を確認したところ、何も設定されていなかった。
crontab関連コマンド
最後にcrontabコマンドに関連して、cron設定で使用するコマンドも紹介しておく。
chmodコマンド
ファイルの権限を設定する。
viコマンド
テキストファイルを編集する。
まとめ
このページでは、crontabコマンドを使い、定期的にジョブを実行する方法を解説した。
cronは刻々と変わる情報を自動的に蓄積できるため、応用範囲は広い。
使用しているコンピュータの状況をログとして残していくほか、Web上の天気サイトからある地点の気温データを抜き出して記録していくような使い方もできるだろう。
コンピュータプログラムを動作させるきっかけとして、人間の操作や、エラー発生時などのイベントがあるが、他にもcronを使うことで、定期的にプログラムを起動できることを覚えておこう。
毎週金曜日に実行するcronは「17 00 * * 5 ./home/vagrant/weekly.sh」ではなく「00 17 * * 5 ./home/vagrant/weekly.sh」ではないでしょうか?
また、実行日時は「分、時、月、日、曜日」の順ではなく「分、時、日、月、曜日」だと思います。
ご指摘ありがとうございます。修正させていただきます。