ドキュメントの全くないサーバーで定期処理(cronやanacron)を調べるときに知らないことが多く、苦労したのでメモ
確認シェル作ってみた
cron(anacron含む)はとにかく書き方が色々ありすぎて、どこに何が書いてあるか分からないので、一覧である程度出すものを作りました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
dir=/etc/crontab | |
echo -e "\n**************${dir}****************" | |
cat ${dir} | |
echo "***********************************" | |
for dir in `ls -d /var/spool/cron/*` | |
do | |
echo -e "\n**************${dir}****************" | |
cat ${dir} | |
echo "***********************************" | |
done | |
dirs=("/etc/cron.d/" "/etc/cron.hourly/" "/etc/cron.daily/" "/etc/cron.weekly/" "/etc/cron.monthly/") | |
for dir in ${dirs[@]} | |
do | |
echo -e "\n**************${dir}****************" | |
ls ${dir} | |
echo "***********************************" | |
done |
知らないサーバーに入ってcronで何をやっているか把握するときはこれを使うとだいたいの内容が分かるはず!
- /etc/crontabの内容を出力
- /var/spool/crontab/[user-name]の内容を出力
- /etc/cron.d/“ ”/etc/cron.hourly/“ ”/etc/cron.daily/“ ”/etc/cron.weekly/“ ”/etc/cron.monthly/
実行するとこんな感じです。
**************/etc/crontab****************
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
***********************************
**************/var/spool/cron/ec2-user****************
0 * * * * echo "hello" >> /tmp/hello
***********************************
**************/var/spool/cron/root****************
0 * * * * echo "hello" >> /tmp/hello
***********************************
**************/etc/cron.d/****************
0hourly raid-check update-motd
***********************************
**************/etc/cron.hourly/****************
0anacron test
***********************************
**************/etc/cron.daily/****************
logrotate man-db.cron tmpwatch
***********************************
**************/etc/cron.weekly/****************
***********************************
**************/etc/cron.monthly/****************
***********************************
結局どうするのが良さそうか
- 正確な時間でやりたい場合にはcron
- daily以上の処理でかつ処理の依存関係がないものや実行時間にバラツキをもたせたい場合にはanacron。例えばバッチ実行した処理結果をDBに書くなどの場合にバッチ実行サーバーが多くあるとある時間帯に一斉にDB書き込みが走るのでそれを分散させる場合など。/etc/rc.d/hourlyはanacronではない点は注意
- 内容にもよるがcronの設定をする場合、/etc/cron.d/配下にファイルを置くやり方の方がファイルを分けることができ、crontab -rを押して内容を消してしまう恐れもないのでベターだと思う
- ユーザー毎に設定するものはcrontab -eで設定する(事前にバックアップはとる事)
- cronの標準出力や標準エラー出力は捨てずにログに出力すること
記述の仕方
- /etc/crontabに記載
- crontab -eコマンドを使う
- /etc/cron.d/配下にファイルを配置
- anacronを使う
/etc/crontabに記載する
- /etc/crontabファイルに記載した内容を定期実行する
crontab -eコマンドを使う
- ユーザーごとに定期処理を記載できる
- /var/spool/cron/配下にユーザー名のファイルが作成されてそこに内容が記載されている
- デフォルトのシェルは/bin/shになる。また、環境変数など設定されていない場合があるので要注意。確認する場合printenvコマンドを実行させる
- cron力をつけよう!全てのcrontab入門者に贈る9個のテクニック
- cron で > /dev/null して椅子を投げられないための3つの方法
/etc/cron.d/配下にファイルを配置
- /etc/cron.d/配下にファイルを置いておくと指定された時間に処理を実行する
- crontabと違ってサービス(アプリ)ごとにファイルを分けることができるので見やすくできる
- 後述するanacronのhourly設定のような/etc/cron.hourlyのジョブは/etc/cron.d/0hourlyによって実行されており、anacronの特徴である遅延処理などがない。デフォルトの場合、毎時0分に実行されるようになっている
anacronを使う
- RHEL 6のジョブスケジューラ「anacron」とは Part1
- /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly配下にファイルを置いておけば定期的に処理を実行する
- cronと違い、正確に実行時間を指定できない(3時から5時のいつかのタイミングで実行などのレンジ指定は可能)
- 設定内容は/etc/anacrontabに記載
0 件のコメント:
コメントを投稿