masalibの日記

システム開発、運用と猫の写真ブログです

今更ながらcrontabを説明した

開発環境にcron(Windowsの場合、タスクスケジューラ)をいれていませんでした
メンバーからどうしたらいいのと聞かれたので答えた
(メンバーのレベルは3年目なのでlinux初心者です)

前提

centos 6.7です

インストールとサービスの設定

開発サーバーにログインして下記のコマンドを
インストールしてください

# 時間ぴったりのcronのインストール
yum -y install cronie-noanacron

# 時間の秒の部分が若干ぶれるのcronはアンインストール
yum -y remove cronie-anacron

# サービスを開始する(stopはエラーになっても問題なし)
service crond restart

# 再起動時に自動でサービスを起動する
chkconfig crond on

インストールが終わったら
下記のコマンドが通るはずです

crontab -e

初期設定は以下のとおりです

#引用:http://www.creatology.jp/unix/outin.html

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
の部分が通常のrootと微妙にちがう可能性があります

超ーーーーーー重要な事

crontab -r

というコマンドは絶対に打たないでください
設定が全部消えます
「r」「e」はキーボードでは隣同士で危険です

なので

1回目の保存以外は
下記のコマンドを実行してください
vi /var/spool/cron/root
(作業おこなう前にはバックアップしてください)

#本番
*/1 * * * * CI_ENV=production php /var/www/html/xxxxproduction/public/index.php system gamedata create_gamedata

#テスト
0 * * * * CI_ENV=testing php /var/www/html/xxxxtesting/public/index.php system gamedata create_gamedata


「CI_ENV=production」は環境変数です
本番は1分に一回実行する
テストは1時間に1回0分の時に実行する


実行された場合は
/var/log/cronにログが出力されます
しかしこのログは実行されたよっていう事しかわかりません

実行しているけど、動きがおかしいとか
どうしてもわからない場合は標準出力を指定してください

0 * * * * CI_ENV=testing php /var/www/html/xxxxtesting/public/index.php system gamedata create_gamedata >>/tmp/analog.log 2>>/tmp/analog-err.log


エラーログが出力されるのでそこからエラーの調査ができます


補足
標準出力とは
http://www.creatology.jp/unix/outin.html

viとは
http://www14.plala.or.jp/campus-note/vine_linux/operation/vi.html