crontabコマンド(Linuxコマンド)を使ってジョブをスケジュール実行

2022/06/29

crontab とは、Linux に定期的な処理を行わせたいときに、実行内容とタイミングを記述しておくファイルのことです。

【 cron 】
サーバの持つ機能の一つで、「指定した時間に、指定したプログラムを動かしてくれる仕組み」です。ちなみに、「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

【 crontabコマンドのオプション 】


# cronを設定する
# 通常は、viエディタが起動して、設定ファイルの編集を行う
$ crontab -e

# 設定されているcronを表示する
$ crontab -l

# cronを削除する
$ cron -r

 

viエディタが開くので以下のように記述します。


:
# 5分ごとに /var/tmp/test に test と書き込む
*/5 * * * * echo "test" >> /var/tmp/test

 

【 cronの設定 】
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

# 行頭に「#」が記載された行は、コメントになります。
# コメント

 

実演

 

【 crantab -e を使わないやり方 】

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識