気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

cron設定方法

1. 編集方法

crontabコマンドでcron設定を行います。

crontab [ -u ユーザ名 ] {-l | -r | -e }

optionは以下です。

-u:cronを設定するユーザーを指定
-l:cronを一覧で表示
-r:cronの設定を全消去
-e:cronを設定するエディタを起動する

コマンド実行ユーザー毎に設定が可能。
ユーザー指定なしではrootの設定を参照、編集することになる。

2. cron設定方法

2.1 cron設定エディタの起動

-uで指定ユーザーのcron設定を編集するエディタを起動する (-uオプションはroot のみ使用可)
rootのcron設定変更時は、-uオプションは不要。

crontab -u root -e

2.2 cron設定の記述方法

分 時 日 月 曜日 <実行コマンド>
指定方法 記述例 説明
固定指定 0 15 * * * echo "hello" 15時になる度にechoの文字列を表示
間隔指定 */5 * * * * echo "hello" 5分ごとに実行
複数指定 5,10 2 * * * echo "hello" 2時5分と2時10分に実行
範囲指定 5 2-4 * * * echo "hello" 2時5分と3時5分と4時5分に実行

様々な書き方の例を記載しておきます。

43 23 * * *               23:43に実行
12 05 * * *               05:12に実行
0 17 * * *                17:00に実行
0 17 * * 1                毎週月曜の 17:00に実行
0,10 17 * * 0,2,3         毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * *             毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1              毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * *                毎月 1日の 4:42分に実行
0 21 * * 1-6              月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * *  10分おきに実行
*/10 * * * *              10分おきに実行
* 1 * * *                 1:00から 1:59まで 1分おきに実行
0 1 * * *                 1:00に実行
0 */1 * * *               毎時 0分に 1時間おきに実行
0 * * * *                 毎時 0分に 1時間おきに実行
2 8-20/3 * * *            8:02,11:02,14:02,17:02,20:02に実行
* 0,8-23 * * *             0時、8時~23時において1分毎に実行
30 5 1,15 * *             1日と 15日の 5:30に実行

分が「*」の場合、1分おきの実行となります。
複数形式と範囲形式を混ぜて記載することも可能。

Cron動作確認

# crond ログの確認
tail -f /var/log/cron

# crond が動いているかどうか
service crond status

/var/log/cron以下にログを出力していない場合、mail実行ログに実行結果が出ている場合があります。
こちらも合わせて確認すると、現状のcron実行状況を確認することができます。

$less /var/mail/user_name

From user@xxx.local  Sun Aug  5 09:22:11 2018
Return-Path: <user@xxx.local>
X-Original-To: user
Delivered-To: user@xxx.local
Received: by xxx.local (Postfix, from userid 501)
        id 30758FA554; Sun,  5 Aug 2018 09:22:01 +0900 (JST)
From: user@xxx.local (Cron Daemon)
To: user@xxx.local
Subject: Cron <user@xxx> echo "helo"
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
X-Cron-Env: <HOME=/Users/user>
Message-Id: <20180805002201.30758FA554@xxx.local>
Date: Sun,  5 Aug 2018 09:22:01 +0900 (JST)

helo

設定ファイルの読み込み

cron設定を記述したファイルを読み込むことで、cron設定できます。

echo '*/5 * * * * echo "hello"' > cron.conf
crontab cron.conf

crontabで-rオプションをつけて設定を全削除してしまう場合があります。 そのような場合に、設定ファイルを出力しておき、読み込むことで、すぐに復旧が可能です。

設定ファイルの実体の場所

バックアップする場合、以下のユーザー毎の設定を保存しておくと良いです。

/var/spool/cron/【ユーザー名】

カレントディレクトリにファイル属性をそのままで/var/spool/cron/以下をすべてコピー

sudo cp -pr /var/spool/cron/ .

cron実行でパス通ってなくてエラーになる場合

シェル内で実行するツールは、フルパス指定で記載するのが、望ましい。

他にもいろんな対処方法があるようですが、
一番シンプルなのは、crontab内でPATH定義する案。
必要なものだけ書いておくのが望ましいです。

PATH=/usr/local/bin:/usr/bin:/bin:

* * * * * echo "hello"