目的
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は定期的に自動実行されるようになりました。