2022/06/29
crontab とは、Linux に定期的な処理を行わせたいときに、実行内容とタイミングを記述しておくファイルのことです。
サーバの持つ機能の一つで、「指定した時間に、指定したプログラムを動かしてくれる仕組み」です。ちなみに、「cron」は機能を示す名称で、「crontab」はコマンド名またはファイル名です。
定期的なログの取得などに活用できます。
例えば PHP と組み合わせると以下のようなことも可能です。
1)cronで設定した、curl コマンドや wget コマンドで 定期的に URL 叩く。
2)URL 先では PHP が実行される。(※例えばある条件下において通知メールを送信)
3)通知メールが送信されて終了
WEBエンジニアは cron を使いこなせたいですよね。
今回は Linux の crontab についてエントリーします。
手順
1)cron のインストール
# crontabコマンド:設定されているcronを表示
$ crontab -l
bash: crontab: command not found
crontabコマンドを使って command not found と表示されたら cron パッケージをインストールしましょう。
# Debian / Ubuntu
$ apt-get install -y cron
実演
2)cron の起動
cron の起動状態を確認し、起動してあげます。
# Cronの起動状態を確認
$ service cron status
cron is not running ... failed!
# cronをインストールしたばかりなのでタスクは何も登録されていない状態
$ crontab -l
no crontab for root
# cron を起動する
$ service cron start
Starting periodic command scheduler: cron.
# cronの起動状態を確認
$ service cron status
cron is running.
実演
3)cron を設定する
cron を設定するために cron の設定ファイルを読み出します。
# 以下のコマンドでcronの設定を行う
$ crontab -e
# cronを設定する
# 通常は、viエディタが起動して、設定ファイルの編集を行う
$ crontab -e
# 設定されているcronを表示する
$ crontab -l
# cronを削除する
$ cron -r
viエディタが開くので以下のように記述します。
:
# 5分ごとに /var/tmp/test に test と書き込む
*/5 * * * * echo "test" >> /var/tmp/test
cronの設定は、実行時間とジョブを半角空白を空けて記録します。
実行時間は、分、時、日、月、曜日を指定し、こちらも半角空白を空けて記録します。
# 毎月20日の23:59にシェルスクリプト/home/vagrant/work.shを実行させる
59 23 20 * * ./home/vagrant/work.sh
# 毎週金曜日の17:00に実行
00 17 * * 5 ./home/vagrant/work.sh
# /5 と表記すると間隔 5 を表すことができる
*/5 * * * * ./home/vagrant/work.sh
# 毎日の11時と23時に、シェルスクリプトを実行させるには次のように2行併記する
0 11 * * * ./home/vagrant/work.sh
0 23 * * * ./home/vagrant/work.sh
# 毎日のお昼12時に、シェルスクリプト実行
0 12 * * * ./home/vagrant/work.sh
# 行頭に「#」が記載された行は、コメントになります。
# コメント
実演
homeディレクトリに .crontab があるので、それに直接書き込みます。
rootユーザで編集した場合はroot権限で cron を実行します。
ちなみに .crontab に書き込むと crantab -e にも内容が反映されます。
# crontab を編集
[root@example ~]# vim .crontab
# 編集した内容を反映
[root@example ~]# crontab .crontab
# crontab の内容を確認
[root@example ~]# crontab -l
4)動作確認
5分以上経過したら /var/tmp/test に "test" と書き込みが行われているか確認してみましょう。
$ cat /var/tmp/test
実演
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。