メモ > サーバ > 各論: エトセトラ > Cronを使用する
Cronを使用する
# vi /etc/crontab
で設定できる
実行ユーザ名を省略すると、root権限で実行されるので注意
(プログラムからログファイルを作成した場合などに、所有者がrootのファイルとなる)
/etc/crontabと/etc/cron.d設定ファイルの書き方 | server-memo.net
http://www.server-memo.net/tips/etc-crontab.html
cronの日時指定を、基礎から学ぶ(分,時,日,月,曜日の指定、◯分ごと、月末起動、など) - YoheiM .NET
https://www.yoheim.net/blog.php?q=20190902
「crontab -e」でも設定できるが危険
crontab -e は「絶対に」使ってはいけない
http://d.hatena.ne.jp/ozuma/20120711/1342014448
ただしcrontabコマンドで編集すれば、書式に問題があれば教えてくれるというメリットはある
viでファイルを直接編集する場合は、書式チェックはされないので注意
書式自体に問題がある場合、Cron自体が動かずにエラーメールも届かないみたい
Cronでの定期実行用ファイルは、以下に置くこともできる
それぞれの意味は、後述の「定期実行用のファイルを置く場合」を参照
/etc/cron.d
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
/etc/anacrontab
ユーザごとのcronは /var/spool/cron/ 内に実行ユーザ名のファイルに記録される
具体的には以下のようなファイルに記録される(Webminでcronを登録した場合も、ここに記録される)
/var/spool/cron/apache
/var/spool/cron/root
【違い】/etc/crontabと/var/spool/cron/[user] - Qiita
https://qiita.com/takahashi-kazuki/items/77d669d4414c6ec185f9
Cronの実行結果は以下に記録される
/var/log/cron
■Cronの設定例
一例だが、/etc/crontab で以下のように設定する
# 1分ごとに実行
* * * * * root /root/sample.sh
# 5分ごとに実行
*/5 * * * * root /root/sample.sh
# 毎時20分に実行
20 * * * * root /root/sample.sh
# 毎日1時に実行
0 1 * * * root /root/sample.sh
# 毎月1日9時に実行
0 9 1 * * root /root/sample.sh
■Cron実行結果のエラーを無視する
以下のように「 >> /dev/null 2>&1」を追加すると、処理中にエラーや警告が発生してもメール通知されない
ただしエラーを無視する場合、別途実行ログを残す仕組みの構築を推奨
*/5 * * * * root /root/sample.sh >> /dev/null 2>&1
いい加減覚えよう。 `command > /dev/null 2>&1`の意味 - Qiita
https://qiita.com/ritukiii/items/b3d91e97b71ecd41d4ea
[Server & Network] Crontab: スクリプトを定期的に実行しログを残す
http://www.d-wood.com/blog/2013/09/16_4644.html
cron で > /dev/null して椅子を投げられないための3つの方法
http://sfujiwara.hatenablog.com/entry/20120613/1339547638
■Cron実行結果を任意のログファイルに記録
「 >> 」でのリダイレクト先をファイルにすると、ログを記録できる
*/1 * * * * apache /usr/bin/php /var/www/html/cron/test.php >> /var/www/html/cron/cron.log 2>&1
■Cron実行結果を任意のメールアドレスに通知
※未検証
以下のようにすることで、任意のメールアドレスに通知できるらしい
「2>&1」とすることで、標準エラー出力もメールで送信できるらしい
0 * * * * /usr/local/sbin/test.sh 2>&1 | mail example@example.com
まとめサイト: cron で実行されたコマンドから出力されたメッセージをメールで送信する方法
https://chibitcpu.blogspot.com/2012/10/cronmail.html
■Cron実行結果を通知しない
Cron設定ファイルで「MAILTO=root」という箇所を「MAILTO=""」に変更すると通知されなくなる
定時実行プログラム CRON からのメール通知を無効化する
https://ez-net.jp/article/AA/lfeElXBI/SYxriXSrub2c/
Anacronの場合も同様に、/etc/anacrontab ファイルを以下のように編集する
#MAILTO=root
MAILTO=""
■定期実行用のファイルを置く場合
以下のディレクトリ内にもcron用のファイルを置くことができる
/etc/cron.d ... 1分に1回実行される
/etc/cron.daily ... 1日に1回実行される
/etc/cron.hourly ... 1時間に1回実行される
/etc/cron.monthly ... 1ヶ月に1回実行される
/etc/cron.weekly ... 1週間に1回実行される
/etc/anacrontab ... 1日に1回実行される。その時間に電源が入っていなかったなどがあっても遅延実行される。詳細は後述の「Cronを使用する > Anacronについて」を参照
■Cronの利用を許可する・禁止する
以下のファイルに、Cronの利用を許可する・禁止するユーザの名前を登録できる
ファイルがなければ新規に作成する
/etc/cron.allow
/etc/cron.deny
Linux、「/etc/cron.allow」「/etc/cron.deny」とはなんぞや?|マコトのおもちゃ箱 〜ぼへぼへ自営業者の技術メモ〜
http://piyopiyocs.blog115.fc2.com/blog-entry-703.html
■Cronを2サーバで1分ごとに実行する
「*/2」と書くと「0, 2, 4, 6 ...」分に実行され、
「1-59/2」と書くと「1, 3, 5, 7 ...」分に実行される
この設定を2つサーバに行うと、2サーバで1分ごとに実行できる
*/2 * * * * … サーバ1
1-59/2 * * * * … サーバ2
crontabで奇数分や偶数分などに実行する指定を簡単に書く方法 - Qiita
https://qiita.com/kawaz/items/e9050dd409cfa56dec6a
■Cronを15秒ごとに実行する
よほどのことがなければ1分ごとで問題ないはずだが、参考程度に
* * * * * /var/www/cron/test.php & sleep 15; /var/www/cron/test.php & sleep 15; /var/www/cron/test.php & sleep 15; /var/www/cron/test.php
■Cronを特定の時間以外に実行する
以下のようにすると、3時を除いて実行できる
0 0-2,4-23 * * *
Crontabで特定の時間を除いて毎時実行 #Pistatium
http://kimihiro-n.appspot.com/show/5871384039260160
■Cronの読み方
crontab - Wikipedia
https://ja.wikipedia.org/wiki/Crontab
「日本語ではクーロンという読みが慣習的に広く用いられているが、英語では通常クロンまたはクローンと発音する。」
■Anacronについて
anacronとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://wa3.i-3-i.info/word11749.html
「指示した時間に指定したプログラムを動かしてくれる」
「お仕事をする周期を1日単位でしか指定できない」
「お仕事をする時間にコンピュータの電源が切れていたら、次に電源が入ったときに、その間のお仕事をもう一回させることができる」