Python
Ubuntu
cron
crontab
ubuntu16.04

Ubuntu16.04(さくらVPS)で1からcronの設定をし、pythonプログラムを定期実行する

More than 1 year has passed since last update.


目的

Ubuntu上にあるpythonのプログラムを定期的に自動実行したいです。

cronを1から設定しました。


環境

OS : Ubuntu16.04 (さくらVPS)

python : Version 3.5


CRONの初期設定


操作1) CRONの動作確認

sudo service cron status

色々CRONの状態が表示されていますが、

「Active: active(running)」と表示されていればOKでしょう。

動いていない場合は、

service crond start

で起動します。


操作2) cronの設定ファイルにジョブを登録

cronの設定ファイルであるcrontabは以下のコマンドで実行できます。

crontab -e

ただし、キーボード上でeの隣にあるrを誤って押すと、「crontab -r」がcrontabの設定を全て初期化してしまいますので、「crontab -e」を頻繁に使うのは危険です。

crontab -eを使わない方法は複数ありますが、私は以下の手順でバックアップを取りながら別で編集をしています。

crontab -l > ~/crontab #バックアップ

vim ~/crontab #バックアップを編集
crontab < ~/crontab #本体に上書き

crontabの書き方については、他のサイトで詳細書いてありますので、そちらを参考にすると良いでしょう。例えばこちらなんかが分かりやすかったです。

なおpythonプログラムを実行する時は、プログラムの前に、pythonが格納されているパスを書かなければいけません。

例えば、毎分ごとにtest.pyを実行したい場合は、

* * * * * /<path_to_python>/python3 /<path_to_file>/test.py 

となります。

pythonへのパスが分からなければ、

which python3

で調べられます。

ログを出力したい場合は、

* * * * * <path_to_python>/python3 /<path_to_file/test.py >> /<path_to_log>/test.log 2>>&1

で良いでしょう。


操作3) ファイルの権限を変更する

基本的には操作2までの設定で良いのですが、私の場合はPermission Deniedのエラーが出ていました。CRONの実行権限がrootでファイルの所有者が別のユーザだったため、権限設定の関係でPermissionがおりなかったという状態です。

とりあえず、「所有者:root, 権限700」に変更します。

chmod 700 test.py

chown root:root test.py

以上で、test.pyは定期的に自動実行されるようになりました。