light log

学んだこととか

cronを使ってみた

使ってみたメモ。超初歩。

概要

cronはジョブを指定した時間に定期的に実行してくれるコマンド(サービス)。

crondデーモンを起動しておく必要がある。

cronで実行されるジョブはcrontabファイルで管理する。crontabファイルは各ユーザごとに存在する。各crontabで管理されるジョブはそのcrontabを所有するユーザの権限で実行される。

crontabファイルは直接編集するのではなく、crontabコマンドで管理(登録/削除/表示)する。

crontabコマンド

書式

crontab [ -u user ] { -l | -r | -e }

-u userでcrontabの所有ユーザを指定する。この指定を省略するとcrontabコマンドを実行したユーザのcrontabが対象となる。

crontab -lでcrontabの内容を表示する。

crontab -rでcrontabの内容を消去する。なんの確認もなく一気に全部消えるので要注意。

crontab -eでエディタが立ち上がってcrontabを編集できる。

crontabファイルの書式

書式

* * * * * command

アスタリスクが左から順に分、時、日、月、曜日を表していて、commandが実行するコマンドを表す。それらをスペース区切りで配置する。

参考:crontabの書き方 | server-memo.net

上の参考ページには大量のわかりやすい例が載っているので、詳しくはそちら参照。

いくつかだけ引用する。

毎時15分になると実行
15 * * * *

毎月10日のAM 6:15 に実行
15 6 10 * *

10分ごとに実行する場合
*/10 * * * *

簡単。

crontab -r 対策

上にも書いたけど、crontab -rでcrontabが簡単に消去されてしまうことが問題なようだ。しかも-e-rはキーが隣同士だ。

問題な「ようだ」と書いたのは、現時点で自分は一つ二つコマンドを登録するだけのつもりなので、全部消えてしまう事の重大さがいまいちピンと来ていないから。でもまぁちゃんと運用していく上で問題だろうことは容易に想像できる。

ということでいくつか対策があるみたい。

crontab -e は「絶対に」使ってはいけない - ろば電子が詰まっている

エイリアス-iオプションを付けて必ず確認が出るようにするとか、-eは使わずファイルに書いたcrontabをcrontabコマンドで読み込むようにするとか。

でもまぁやっぱり今はまだ、自分にはこの辺はオーバースペックな気がするので、当面は「-rには気をつける」という心掛けでいいかな、という気がする。登録ジョブが増えてきたら考えようと思う。

まとめ

意外と簡単な設定で使えて驚き。