【コマンド】linux定期ジョブスケジュール – cron

【コマンド】linux定期ジョブスケジュール – cron

はじめに

定期的にコマンド実行ができる「cron」について基本的な使い方等を紹介したいと思います。

環境

  • Windows10
  • WSL(Ubuntu 18.04.4 LTS)

cron起動確認・起動

# 起動
$ sudo service cron start
# 確認
$ sudo service cron status

内容

作成・編集(自動的にviモードになる)

ファイル編集して保存するだけです。初めて作成する場合でも同じコマンドで問題ありません。今回は、簡単にechoコマンドを毎分実行するように設定してみます。

また、crontab -eで編集する際、カレントユーザのcronファイルを編集することと同じです。

$ crontab -e

最後の行は改行で終わるようにしましょう。

* * * * * echo aaa;
\n

「\n」は、ここで表現する上での表記です。本来は、enterキーで改行を表すことができると思います。

crontabの書き方内訳

cronでは、細かく時間設定が可能です。先頭から5項目は、時間設定、6項目目が実際に実行するコマンドを記述します。

[ 分 ] [ 時 ] [ 日 ] [ 月 ] [ 曜日 ] [ コマンド ] 
項目内容
0 ~ 59, *, -, /
0 ~ 23, *, -, /
1 ~ 31, *, -, /
1 ~ 12, *, -, /
曜日1(月曜日) ~ 6(土曜日), 7 or 0(日曜日), *, -, /
コマンドだいたいフルパスで書いた方が確実です。

時間の書き方の例

何分単位や何時間単位など細かく設定ができます。以下、簡単な例です。(コマンド部分は省略しています。)

## 時間の書き方
* * * * *  # 毎分実行
0,5 1 * * *  # 1時0分及び1時5分に実行
0-10 1 * * * # 1時0分~1時10分まで1分単位で実行
*/10 * * * *  # 毎時10分単位で実行

ファイル確認

cron設定は、crontabs直下にユーザ単位で作成されます。確認する場合はrootユーザが確実です

/var/spool/cron/crontabs/[ ユーザ名 ] # centosだとcronの直下にあったりする

リスト確認

catコマンドと似たように追記した内容表示してくれます。

$ crontab -l
* * * * * echo aaa;

実行ログの確認

デフォルトではcron.logの出力をしないようになっていますのでコメントアウトを外します。※念のためバックアップを取ってください。

$ sudo vi /etc/rsyslog.d/50-default.conf
#cron.*                          /var/log/cron.log

rsyslogを再起動します。

$ sudo service rsyslog restart
 * Stopping enhanced syslogd rsyslogd                                                                                                                               [ OK ] 
 * Starting enhanced syslogd rsyslogd                                                                                                                                      
rsyslogd: set SO_TIMESTAMP failed on '/dev/log': Invalid argument [v8.32.0]
rsyslogd: imklog: cannot open kernel log (/proc/kmsg): No such file or directory.
rsyslogd: activation of module imklog failed [v8.32.0 try http://www.rsyslog.com/e/2145 ]

cron.logを確認します。

$ less /var/log/cron.log
Oct  4 13:58:01 DESKTOP-FVRO68I CRON[576]: (torikky) CMD (echo aaa;)
Oct  4 13:58:01 DESKTOP-FVRO68I CRON[575]: (CRON) info (No MTA installed, discarding output)
Oct  4 13:59:01 DESKTOP-FVRO68I CRON[579]: (torikky) CMD (echo aaa;)
Oct  4 13:59:01 DESKTOP-FVRO68I CRON[578]: (CRON) info (No MTA installed, discarding output)
Oct  4 14:00:01 DESKTOP-FVRO68I CRON[597]: (torikky) CMD (echo aaa;)
Oct  4 14:00:01 DESKTOP-FVRO68I CRON[596]: (CRON) info (No MTA installed, discarding output)

実行できていることが確認できました。

最後に

今回あえてcronの削除方法は載せておりません。crontabのオプションで設定情報を一発削除できますが、あまりオプションを利用しての削除は如何なものかと個人的には考えております。

理由としましては、積み上げたものを削除するのは本来エネルギーを使うものだと思います。実は削除してはいけない設定があったのにも関わらず一発で削除して復元が困難、または最悪の場合復元不可能といった場合があるからです。基本的にバックアップは取っているはずですので問題ないにしても削除するということはもう使えなくなることを意味していますので、不用意にオプションを利用せずrmコマンドで適切な権限を持ったユーザで行うべきだと考えます。

もっぱら関係ないファイルを削除したりするなどは論外ですが(笑)