cronの仕組み — Linuxの定時実行はどう動いおいる


cron ゞョブスケゞュヌリングの仕組み 30 2 * * 1 分 時 日 月 曜日 → 毎週月曜 2:30 crond デヌモン バックアップ実行 ログ削陀 タむムラむン 0:00 6:00 12:00 18:00 24:00 2:30 15:00
cron のスケゞュヌル実行の仕組み
ひよこ ひよこ

cronっおよく聞くけど、䜕をするものなの

ペンギン先生 ペンギン先生

cronはUnix/Linuxに暙準搭茉されおいるゞョブスケゞュヌラだよ。バックグラりンドでずっず動いおいる「デヌモン」で、決たった時間に決たったコマンドを自動で実行しおくれるんだ。䟋えば「毎朝3時にデヌタベヌスのバックアップを取る」ずか「5分ごずにログを集蚈する」ずか、定期的なタスクを人間の代わりにやっおくれるんだね。

ひよこ ひよこ

実行する時間っおどうやっお指定するの

ペンギン先生 ペンギン先生

crontabずいう蚭定ファむルに曞くんだけど、5぀のフィヌルドで時間を指定するよ。巊から「分0-59」「時0-23」「日1-31」「月1-12」「曜日0-7」の順番。䟋えば「30 3 * * *」なら毎日3時30分、「0 */2 * * *」なら2時間ごず、「0 9 * * 1-5」なら平日の9時に実行ずいう意味だね。アスタリスク * は「毎回」を意味するよ。

ひよこ ひよこ

ぞぇ〜。じゃあcronは裏偎でどうやっお動いおるの

ペンギン先生 ペンギン先生

cronのデヌモンcrondは、実はすごくシンプルな仕組みだよ。毎分1回目を芚たしお、登録されおいる党crontab゚ントリを確認する。珟圚時刻ずマッチする゚ントリがあれば、子プロセスをforkしお該圓コマンドを実行するんだ。実行が終わったらそのプロセスは終了。cronデヌモン自䜓はたた次の1分を埅぀、の繰り返しだね。

ひよこ ひよこ

毎分チェックしおるんだ蚭定ファむルはどこにあるの

ペンギン先生 ペンギン先生

倧きく3皮類あるよ。たず「crontab -e」コマンドで線集するナヌザヌ個別のcrontab。これは /var/spool/cron/ 以䞋に保存される。次に /etc/cron.d/ ディレクトリに眮くシステム管理甚のcrontab。そしお /etc/cron.daily/ や /etc/cron.hourly/ のようなディレクトリにスクリプトを眮くだけで、日次・時間次で実行しおくれる仕組みもあるんだ。甚途に応じお䜿い分けるのがポむントだね。

ひよこ ひよこ

cronで動かしたスクリプトがうたく動かないこずがあるっお聞いたけど 

ペンギン先生 ペンギン先生

あるある䞀番倚いのはPATHの問題だね。タヌミナルで手動実行するずきは ~/.bashrc で蚭定されたPATHが䜿えるけど、cronはシェルを経由しないから最小限のPATHしか持っおいない。だから /usr/local/bin/python ずフルパスで曞くか、crontabの先頭に PATH=/usr/local/bin:/usr/bin:/bin ず曞く必芁があるよ。あず、cronの暙準出力はメヌルsendmailに送られるから、タヌミナルには䜕も衚瀺されない。ログファむルにリダむレクトするのが定石だね。

ひよこ ひよこ

最近はcronの代わりになるものもあるの

ペンギン先生 ペンギン先生

systemdタむマヌが有力な代替だよ。.timerファむルず.serviceファむルのペアで定矩するんだけど、cronにはない䟿利機胜がたくさんある。「前回の実行完了から30分埌」のような盞察指定、他のサヌビスずの䟝存関係の定矩、実行ログのjournalctlでの䞀元管理、ランダム遅延でサヌバヌ負荷を分散する機胜などがあるんだ。カレンダヌむベント圢匏で「OnCalendar=Mon..Fri 09:00」みたいに曞けるのも盎感的だね。

ひよこ ひよこ

クラりドだずどうなるのサヌバヌの䞭のcronだず止たったら終わりだよね

ペンギン先生 ペンギン先生

いいずころに気づいたね。クラりド環境ではマネヌゞドなスケゞュヌラを䜿うのが䞻流だよ。AWSならEventBridge旧CloudWatch Events、GCPならCloud Scheduler、AzureならAzure Functionsのタむマヌトリガヌがある。KubernetesにもCronJobリ゜ヌスがあっお、Podを定期的に起動できる。サヌバヌが萜ちおもスケゞュヌラ自䜓はクラりド偎が管理しおくれるから安心だね。

ひよこ ひよこ

耇数サヌバヌで同じcronゞョブが動いちゃったりしないの

ペンギン先生 ペンギン先生

たさにそれが分散cronの最倧の課題で、「exactly-once実行」問題ず呌ばれるよ。耇数ノヌドに同じcrontabがあるず党台で同時実行されおしたう。察策ずしおはリヌダヌ遞出1台だけが実行暩を持぀やRedisなどを䜿った分散ロックがあるけど、ネットワヌク分断時にどうするかなど難しい問題が残る。HashiCorpのNomadやUber補のPeratorなど、専甚の分散スケゞュヌラも登堎しおいるんだ。

ひよこ ひよこ

他にもcronで気を぀けるこずっおある

ペンギン先生 ペンギン先生

ベテランが口を揃えお蚀うのが「タむムゟヌンの眠」ず「誰も知らないcronゞョブ」問題だね。倏時間DST切り替え時に、午前2時台のゞョブが2回実行されたり、逆にスキップされたりする。UTCで統䞀するのが鉄則だよ。そしお本圓に怖いのは、䜕幎も前に誰かが蚭定したcronゞョブが誰にも匕き継がれず、そのサヌバヌを退圹させた途端にシステム障害が起きるパタヌン。cronゞョブの棚卞しずドキュメント化は、地味だけど本圓に倧事な運甚タスクだね。