【ITニュース解説】Day-6: Cron Job | 100 Days of DevOps
2025年09月27日に「Dev.to」が公開したITニュース「Day-6: Cron Job | 100 Days of DevOps」について初心者にもわかりやすく解説しています。
ITニュース概要
Cronジョブは、Linuxサーバーでログ整理やバックアップといったタスクを、指定した時間に自動実行させる機能だ。crontabファイルに実行スケジュールとコマンドを記述し、システム管理や業務の自動化に活用できる必須のツールだ。
ITニュース解説
システムエンジニアを目指す皆さんにとって、サーバーの自動化は非常に重要なスキルの一つだ。その中でも特に基本であり、かつ強力なツールが「Cron Job(クロンジョブ)」である。これはLinuxなどのUnix系オペレーティングシステムに標準で備わっている機能で、特定の時間に特定の処理を自動で実行させることができる。例えば、サーバーのログを定期的に掃除したり、大切なデータベースのバックアップを毎日深夜に取ったり、あるいは週に一度のレポートを自動で送信したりといった、様々な日常業務を自動化するために活用される。
Cron Jobの核となるのは、「cronサービス(crond)」と呼ばれるものだ。これはサーバーのバックグラウンドで常に動いており、特定のファイルを定期的にチェックしている。そのファイルこそが「crontab(クロンタブ)」、つまり「cron table」の略称である。このcrontabファイルには、いつ、どのようなコマンドを実行するかという指示が書かれており、cronサービスはその指示に従ってタスクを自動で実行する。システム上の各ユーザーは自分専用のcrontabファイルを持つことができ、さらにシステム全体に適用されるcrontabファイルも/etc/crontabという場所に存在する。これにより、ユーザーごとに異なる自動化タスクを設定したり、システム全体に影響するタスクを設定したりすることが可能になる。
では、実際にCron Jobを設定する際の「構文」について解説しよう。Cron Jobの定義は一見複雑に見えるが、実は非常にシンプルだ。基本的に「5つの時間指定フィールド」の後に「実行したいコマンド」が続く形式となっている。それぞれのフィールドが何を意味するのかを理解すれば、思ったよりも簡単に使いこなせるはずだ。
構文は以下の順に並んでいる。
分 時 日 月 曜日 実行するコマンド
最初のフィールドは「分」を表し、0から59までの数字で指定する。 2番目のフィールドは「時」で、0から23までの数字で指定する。これは24時間表記だ。 3番目のフィールドは「日」を表し、月の何日かを1から31までの数字で指定する。 4番目のフィールドは「月」で、1から12までの数字で指定する。 最後の5番目のフィールドは「曜日」を表し、0から6までの数字で指定する。ここで0は日曜日を意味し、1が月曜日、2が火曜日、といった具合に続く。7も日曜日を表す場合がある。
これらのフィールドには、ただ数字を入れるだけでなく、より柔軟な指定を可能にする「特殊文字」も存在する。
最もよく使われるのが「*(アスタリスク)」だ。これは「全ての値」を意味する。例えば、分のフィールドに*を指定すれば「毎分」となるし、時のフィールドに*を指定すれば「毎時」となる。
次に「,(カンマ)」がある。これは複数の値を列挙する際に使う。例えば、分のフィールドに1,15と指定すれば「1分と15分」に実行される。
「-(ハイフン)」は範囲を指定するために使う。例えば、時のフィールドに9-17と指定すれば「午前9時から午後5時までの間」となる。
そして「/(スラッシュ)」はステップ値を指定する。例えば、分のフィールドに*/5と指定すれば「5分ごと」に実行される。これは「全ての値(*)を5単位でスキップしながら」という意味になる。
これらの構文と特殊文字を組み合わせることで、様々な実行タイミングを設定できる。いくつか具体的な例を見てみよう。
例えば、「5分ごとに"Hello"という文字列を/tmp/hello.logファイルに追記する」というCron Jobは、*/5 * * * * echo "Hello" >> /tmp/hello.log となる。分のフィールドの*/5が「5分ごと」を意味し、その他の時間フィールドは全て*なので「毎時、毎日、毎月、曜日関係なく」実行される。
次に、「毎日深夜0時に/usr/bin/backup.shというバックアップスクリプトを実行する」場合は、0 0 * * * /usr/bin/backup.sh となる。これは「0分0時(深夜0時)に、毎日、毎月、曜日関係なく」実行するという意味だ。
「毎週月曜日の午後2時30分に実行する」場合は、30 14 * * 1 となる。「30分14時(午後2時30分)に、毎月、曜日が1(月曜日)の時に」実行される。
「6時間ごとに/usr/bin/update.shという更新スクリプトを実行する」場合は、0 */6 * * * /usr/bin/update.sh となる。これは「毎時の0分に、6時間ごとに、毎日、毎月、曜日関係なく」実行するという意味だ。
さらに複雑な例として、「月曜日から金曜日の午前9時15分、午前10時15分、…、午後5時15分に/usr/bin/send_report.shというレポート送信スクリプトを実行する」場合は、15 9-17 * * 1-5 /usr/bin/send_report.sh となる。これは「毎時の15分に、9時から17時(午前9時から午後5時)の間に、毎日、毎月、曜日が1から5(月曜日から金曜日)の時に」実行するという意味になる。
実際にCron Jobを自分のシステムで設定するには、いくつかの手順を踏む必要がある。
まず、多くのLinuxディストリビューションではCronが標準でインストールされていることが多いが、もしインストールされていない場合はインストールが必要だ。
CentOSやRHEL系のシステムでは、sudo yum install -y cronieというコマンドでインストールできる。インストール後、sudo systemctl enable crondでシステム起動時に自動的にcronサービスが開始されるように設定し、sudo systemctl start crondでサービスを起動する。
UbuntuやDebian系のシステムでは、sudo apt-get updateでパッケージリストを更新した後、sudo apt-get install -y cronでインストールする。その後、CentOS/RHELと同様にsudo systemctl enable cronとsudo systemctl start cronでサービスを有効化し起動する。
Cronサービスが稼働したら、いよいよCron Jobを追加する。自分のユーザーアカウントでCron Jobを設定するには、crontab -eというコマンドを実行する。このコマンドを実行すると、通常はテキストエディタが開かれ、そこに先ほど説明した構文に従って実行したいタスクを記述する。記述し終えてファイルを保存して閉じると、その内容がすぐに有効になる。
設定したCron Jobが正しく登録されているかを確認するには、crontab -lというコマンドを使う。これにより、現在登録されているCron Jobのリストが表示される。
最後に、設定したCron Jobが意図した通りに動作するかを確認する方法も知っておくと良い。例えば、*/2 * * * * echo "Cron is working!" >> /tmp/test_cron.logというCron Jobをcrontab -eで追加してみよう。これは「2分ごとに"Cron is working!"というメッセージを/tmp/test_cron.logファイルに追記する」という設定だ。これを保存して数分待った後、cat /tmp/test_cron.logというコマンドでファイルの中身を表示してみる。もし、そのファイルに「Cron is working!」というメッセージが複数回追記されていれば、Cron Jobが正しく動作していることが確認できる。
Cron Jobは、システム管理や開発作業において非常に多くの場面で活用される。一般的な使用例としては、前述のデータベースバックアップの自動化や、ディスク容量を圧迫しないようにログファイルを定期的に削除・整理する「ログファイルのローテーションやクリーニング」、顧客への請求書や週次レポートなどを自動で生成・送信する「定期的なメールやレポートの送信」、システムを最新の状態に保つための「パッケージやデータベースの更新」、そしてサーバーの健全性をチェックするためにディスクの使用状況などを監視し、異常があれば通知するといった「ディスク使用状況の監視」などが挙げられる。
Cron Jobは、たった数行の設定で、これらの手間のかかるタスクを正確に、そして確実に自動実行できるため、システムエンジニアにとって必須の知識と言える。サーバーの管理効率を飛躍的に向上させ、より重要な業務に集中するための時間を生み出す強力なツールなのだ。そのシンプルさと裏腹に、システムを安定稼働させるための基盤となる非常に重要な役割を担っている。Cron Jobの概念と使い方を習得することは、システムエンジニアとしてのキャリアを築く上で大いに役立つだろう。