#はじめに
最近LinuxでバッチファイルやPythonプログラムを定期実行したいということがあり、その方法を調べたので備忘録として記事にしておきます。いくつか定期実行の方法があると思いますが、今回はcronを使いました。
#cronとは?
多くのUNIX系OS(Linuxなど)で標準的に利用される常駐プログラム(デーモン)の一種で、利用者の設定したスケジュールに従って指定されたプログラムを定期的に起動してくれるものです。
#どんな感じで定期実行してくれるの?
crontab(cron table)コマンドで実行したいプログラムやコマンド、シェルスクリプトなどと実行日時、実行ユーザーを指定すると、同名のテキストファイル(crontabファイル)が保存され、設定が行われます。
(※「/etc/crontab」にあるcrontabファイルを直接書き換える方法もあります。)
上記の設定が完了すればシステムに常駐するデーモンの一つであるcrond(cron daemon)がcrontabファイルに書かれたスケジュールに従って、決まった日時に指定されたプログラムを実行してくれるといった感じで実行が行われます。
###補足
実行スケジュールは分刻みで指定することができ、毎時、毎日、毎週、毎月、再起動時などを指定できるほか、該当する値を列挙したり範囲を指定することにより、「毎週月曜・水曜・金曜の午前0時」「9時から17時の毎時0分と30分」といった指定もできます。
ちなみにcrontabファイルは各ユーザーのホームディレクトリの中にもありそちらを変更するとユーザーを指定して実行が行われます。
(↑管理者権限が無いユーザーなら管理者実行が必要な処理はできない)
#具体的な設定方法
やり方は大きく分けて2つあります。
###crontab(cron table)コマンドで設定する
-
実行したいユーザーでログインしシェルで以下のコマンドを実行
crontab -e
-
デフォルトエディタで設定ファイルが読み込まれるので、次のような設定を記述し保存。
[minute hour day month dow(Day of the week) command] 0 7 * * * (実行したいコマンドやプログラムを記載)
###/etc/crontabを編集
-
suコマンドでrootになる
-
エディタで/etc/crontabを編集する。次のような行を最後に追加すれば良い
[minute hour day month dow(Day of the week) user command] 00 07 * * * (実行ユーザー) (実行したいコマンドやプログラムを記載)
-
crondを再起動します
/etc/rc.d/init.d/crond restart
#どんなコマンドを実行すれば良いかわからない人へ
登録コマンドをWebサイトでぽちぽち押していけば作成してくれるサイトがあります。
[UNIXのCRONTABの設定ヘルパー]
(http://www.japan9.com/cgi/cron.cgi)
#参考にした、参考になるサイト
- [定期実行の手法3パターンとその活用例]
(https://qiita.com/shuntaro_tamura/items/c759bc318859a1203211) - [クーロン(cron)をさわってみるお]
(https://qiita.com/katsukii/items/d5f90a6e4592d1414f99) - [定期的にスクリプトを自動実行させる]
(https://qiita.com/msrks/items/6a180e03d7af622f2101) - [プログラムの自動実行(cron)について]
(http://tsuttayo.jpn.org/crond/)