さくらVPSでcronを設定する(CentOS)

さくらインターネットのVPS(さくらVPS)にcronを設定して、スクリプトを自動実行する方法のメモです。OSは、さくらVPSの標準OS(CentOS)です。

cronとは、設定したコマンドやスクリプトをコンピュータが自動で実行してくれる便利な仕組みのことです。crontabというファイル内に、所定のフォーマットに従って書き込むだけで、処理を自動化してくれます。

cronとは、UNIX系システムの常駐プログラム(デーモン)の一種で、ユーザの設定したスケジュールに基づいて指定したコマンドやシェルスクリプトなどを自動実行してくれるプログラム。

実行スケジュールは毎時、毎日、毎週、毎月をはじめ細かく指定でき、「crontab」というファイルに記述・保存しておく。crond(cron daemon)というプロセスがcrontabの内容に従って、決められた日時にコマンドなどを実行してくれる。

(出典:cronとは|crond|crontab – 意味/解説/説明/定義 : IT用語辞典

さくらVPSのOSは、「標準インストール」のCentOS 6.7を使っています。また、さくらVPSにSSH接続してコマンドラインで操作しています。

crontabのインストールを確認

まずはcrontabがインストールされていることを確認します。ターミナルに以下のコマンドを打ち込みます。

service crond status

「crond (pid 1182) is running…」というような感じで表示されればcrontabがインストールされています。今回は、標準でcrontabがインストールされていました。

インストールされていなかった場合には、以下のコマンドを打ちます。

yum install crontabs

crontabの設定

以下のコマンドを入力して、crontabの設定を書いていきます。

crontab -e

コマンドを打つと、viが立ち上がり、始めてcrontabを設定する場合には空のファイルを編集している状態になります。ここに実行するスクリプトとスケジュールを書き込みます。

viの操作がわからない場合、キーボードの設定を英数にした後、”i”を押すと編集モードになって、”Escape、:、w、q、Enter”の順で押すとファイルが保存されることだけ覚えておいてください。

例えば、”/home/user/”ディレクトリにある”hello.py”というスクリプトを毎分実行する場合、ここに以下のように書いて保存します。スクリプトは絶対パスで指定します。末尾には改行を入れておきます。

* * * * * python /home/user/hello.py

このスクリプトはcronの動作確認用に書いたPythonのスクリプトで、起動されるたびに”time.txt”というファイルに現在時刻を追記していきます。

# -*- coding: UTF-8 -*-

import datetime

t = datetime.datetime.now()

fileName = "/home/vpsuser/time.txt"
htmlFile = open(fileName,"a")
htmlFile.write(str(t)+'\n')
htmlFile.close()

crontabを上記のとおり設定してスクリプトを毎分起動するようにしてみたところ、以下のようにスクリプトが毎分動いていることが確認できました。

2015-12-18 14:08:01.894219
2015-12-18 14:09:01.906705
2015-12-18 14:10:01.923012
2015-12-18 14:11:01.940114
2015-12-18 14:12:01.952755
2015-12-18 14:13:01.965816
2015-12-18 14:14:01.978471

ちなみに、不要なcronを停止するには、行ごと削除する(”dd”とコマンドする)か、行頭に”#”を付けてコメントアウトしておきます。

crontabの書き方

crontabには、「分 時 日 月 曜日 実行ユーザ 実行コマンド」という順番で設定を書きます。実行ユーザは省略可能です。省略した場合、crontabを実行したユーザで実行するようです。

いくつかcrontabの書き方の例をあげておきます。

スクリプトを毎分実行する:

* * * * * python /home/user/hello.py

スクリプトを毎時0分に実行する:

0 * * * * python /home/user/hello.py

スクリプトを毎時0分および30分に実行する:

0,30 * * * * python /home/user/hello.py

スクリプトを毎日8時0分に実行する:

0 8 * * * python /home/user/hello.py

曜日は0が日曜日、以下月火水と続きます。7も日曜日です。

毎週土曜朝8時にスクリプトを実行する:

0 8 * * 6 python /home/user/hello.py

こんな感じでしょうか。

cronを使うと、定期的に実行したいスクリプトを自動で起動してくれて良い感じですね!

シェアしてもらえるとうれしいです。゚(´っωc`)゚。