CRONを触るのが初めてですが、CentOSでcronで、指定した時間に
1) Virtualenvを立ち上げ、
2) pythonアプリを動かす
ことが、以下の設定で出来ました。
cronで仮想環境を立ち上げてから、アプリを起動する
情報があまりなく、苦労したので、備忘として、まとめておきます。良く参照する時間の設定だけ、ここに再掲。
crontab -u root -e
cronの設定を記述
分 時 日 月 曜日 <実行コマンド>
・固定指定
以下のように設定すると、15時になる度に実行。
0 15 * * * echo "hello."
・間隔指定
間隔を指定したい場合。
例では、5分毎に実行されます。
*/5 * * * * echo "hello."
・複数指定
複数時間を設定したい場合はカンマ(,)で区切ります。
例では、午前2時5分と午前2時10分に実行。
5,10 2 * * * echo "hello."
・範囲指定
複数指定よりも範囲で指定した方がいい場合があります。
以下のようにすると、指定範囲で実行できます。
例では、午前2時5分、午前3時5分、午前4時5分、午前5時 5分に実行されます。
5 2-5 * * * echo "hello."
月曜-金曜
0 15 * * mon-fri echo "hello."
分 時 日 月 曜日 <実行コマンド>
・固定指定
以下のように設定すると、15時になる度に実行。
0 15 * * * echo "hello."
・間隔指定
間隔を指定したい場合。
例では、5分毎に実行されます。
*/5 * * * * echo "hello."
・複数指定
複数時間を設定したい場合はカンマ(,)で区切ります。
例では、午前2時5分と午前2時10分に実行。
5,10 2 * * * echo "hello."
・範囲指定
複数指定よりも範囲で指定した方がいい場合があります。
以下のようにすると、指定範囲で実行できます。
例では、午前2時5分、午前3時5分、午前4時5分、午前5時
5 2-5 * * * echo "hello."
月曜-金曜
0 15 * * mon-fri echo "hello."
*****結論だけ知りたい方*****
crontabに以下の書式で記述することでアプリを実行できます。
◇毎日 13:00pm (JST)に実行。
* 13 * * * cd [ 実行するpython executableのディレクトリまでのフルパス] &&
[ 仮想環境のpythonまでのフルパス] [実行したいパイソンファイル名] config/config.ini > /dev/null 2>&1
で、実現できます。 例えば、具体的には以下のような記述。
* 13 * * * cd /var/www/html/app && /home/virtualenv/bin/python test.py config/config.ini > /dev/null 2>&1
1) /var/www/html/app
このディレクトリに、実行したいpythonのアプリファイルを格納しています。
2) /home/virtualenv/bin/python
使用したい仮想環境のpythonまでのフルパス
3) test.py
1)のディレクトリに格納している、実行するpyファイルです。
これでcronでVirtualenvを立ち上げて、Pytho
参考)仮想環境を立ち上げる必要がない場合は、
* 13 * * * python3 /var/www/html/app/ test.py
という、分かり易い書き方になります。
*****以下、基本事項を確認しなら*****
cronの設定 手順
0. crondの状態確認
1)crond が動いているかどうか
systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond
Active: active (running) since Sat 2019-05-04 12:17:34 JST; 3 weeks 1 days ago Main
PID: 13525 (crond)
2) crond 動いていなかったらOS起動時に Cron も自動起動するようにしておきす。
# systemctl enable crond.service (systemctl start crond)
#systemctl start crond.service (systemctl start crond)
2) crond ログの確認
tail -f /var/log/cron
1. CentOS 7 用の設定
CentOS7では初期設定でcronie-anacronがイ
依存関係上先に、cronie-noanacronをインストー
(確認)
[root@ueczshc7 ~]# yum list installed | grep cronie
cronie.x86_64 1.4.11-17.el7 @base/7.4.1708
cronie-anacron.x86_64 1.4.11-17.el7 @base/7.4.1708
# yum -y install cronie-noanacron
Installed:
cronie-noanacron.x86_64 0:1.4.11-20.el7_6 Dependency Updated:
cronie.x86_64 0:1.4.11-20.el7_6 cronie-anacron.x86_64 0:1.4.11-20.el7_6
Complete!
# yum -y remove cronie-anacron
Removed:
cronie-anacron.x86_64 0:1.4.11-20.el7_6 Complete!
[root@ueczshc7 ~]# yum list installed | grep cronie
cronie.x86_64 1.4.11-20.el7_6 @updates
cronie-noanacron.x86_64 1.4.11-20.el7_6 @updates
設定は/etc/cron.d/dailyjobsで行う。設定の確認。
$ cat /etc/cron.d/dailyjobs
[root@eowrirn3 ~]# cat /etc/cron.d/dailyjobs
# Run the daily, weekly, and monthly jobs if cronie-anacron is not installed
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr
MAILTO=root
# run-parts
02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
cronie-anacronが削除されない場合は、実行されな
実行したいシェルは頻度に応じて/etc/cron.daily
$ sudo systemctl restart crond
ログは/var/log/cronに出力される
ログの確認。
$ sudo less /var/log/cron
(以上、https://qiita.com/satouf/i
****cronのログをvi で編集すると、ログが更新されなくなることがある。
そんな時は、
♯ service rsyslog restart
を実行。
2. crontabの設定
1)参照
# crontab -l
10 * * * * /root/crontest.sh
2)編集
crontab -u root -e
3)記述方法
cronの設定を記述
分 時 日 月 曜日 <実行コマンド>
・固定指定
以下のように設定すると、15時になる度に実行。
0 15 * * * echo "hello."
・間隔指定
間隔を指定したい場合。
例では、5分毎に実行されます。
*/5 * * * * echo "hello."
・複数指定
複数時間を設定したい場合はカンマ(,)で区切ります。
例では、午前2時5分と午前2時10分に実行。
5,10 2 * * * echo "hello."
・範囲指定
複数指定よりも範囲で指定した方がいい場合があります。
以下のようにすると、指定範囲で実行できます。
例では、午前2時5分、午前3時5分、午前4時5分、午前5時
5 2-5 * * * echo "hello."
上記の書式で記述後、保存してエディタを閉じると設定完了です。
#設定読み込み作業は不要で、保存すると自動で実行されるが、、
#設定ファイルの読み込み
#cronの設定を記述したファイルを読み込むことで、cron
#echo '*/5 * * * * echo "hello."' > cron.conf crontab cron.conf
crontabで、-rオプションを誤ってつけてしまうと、設定
3.仮想環境を起動して、Python実行
(手順)
* * * * * /usr/bin/env bash -c 'YOUR_COMMAND_HERE' > /dev/null 2>&1
◇記述例1 (bashでVirtualenvを起動させる方法)
0 3 * * * /usr/bin/env bash -c 'cd /var/www/html/app/ && source /home/virtualenv/bin/activa
◇記述例2 (仮想環境下のPythonをポイントする方法)
0,30 * * * * cd /home/myuser/myproject && venv/bin/python bot.py config/config.ini > /dev/null 2>&1
◇適用例2
* * * * * cd /var/www/html/app/ && /home/virtualenv/bin/python test.py config/config.ini > /dev/null 2>&1
記述例3 (python app内に、仮想環境を起動するscriptを書き込む)
# coding: utf-8
activate_this ='/home/virtualenv/bin/acti
exec(open(activate_this).read(
******************************
0 件のコメント:
コメントを投稿