【初心者向け】Cronとは?出来ることや、書き方を解説

PHPなどのWEBシステムの開発をしている際に、Cronという単語を聞いたことがある人もいるのではないでしょうか。

Cronは、システムを定時実行する際などに利用される仕組みで、多くのシステム開発で利用されている物になります。

また、似たような仕組みとしてCrontabという物もありますが、これらの違いが明確には分からない人も多いでしょう。

今回は、WEB開発において非常に重要な仕組みである「Cron」について、出来ることや書き方・設定方法をまとめていきます。

是非、今後のWEB開発に役立てて頂ければと思います。

Cronとは

Cronは、「クーロン(またはクローン)」と読み、UnixおよびUnix系オペレーティングシステムで使用される、自動的にタスクを実行するためのスケジューラーです。

Cronは、定期的に実行する必要があるタスクを設定し、指定した日時に自動的に実行することができます。

Cronで実行される単位を「ジョブ」と呼び、Cronジョブはテキストファイルに記述されます。

Cronジョブは、通常、システムの管理、自動バックアップ、自動アップデートなど、繰り返し実行する必要のあるタスクを自動化するために使用されます。

Cronは、Unix系オペレーティングシステムで広く使用されており、LinuxやmacOSなどのシステムでも利用可能です。

CronとCrontabの違い

Cronと混同されるものとして「Crontab」というものがあります。

両方ともUnix系オペレーティングシステムで使用される自動化ツールですが、それぞれ異なる役割を持っています。

簡単に説明すると、
「Cronは定期的にプログラムを実行するための仕組みであるのに対して、CrontabはCronジョブのエディタ」
です。

つまり、実際に命令文を書くのは、Crontabファイルであり、そのCrontabファイルをCron定期的に実行するイメージとなります。

Cronに出来ること

では、具体的にCronを利用すると、どのようなことができるのでしょうか。

ここでは、一般的に利用されるCronの利用用途を説明します。

システムの自動バックアップの作成

システム開発において、
「一度作ったら、それ以上触らない」
ということは稀です。

一般的には、何かしらのバグが見つかったり、想定していなかった動きが見つかることが多いです。

そういった際に、複数の人がシステムを触ると、
「誰がどこを、何のために直したか」
が不明瞭になることがあります。

以前に修正した部分が、別の修正で上書きされることを「デグレ」などと言われ、システム運用でよくある失敗とされています。

このとき、元の状態に戻せれば良いですが、ファイルを上書きした結果、過去のファイルが消えてしまっていた場合、調査などの非常に多くの時間を使うことになります。

ファイルが残っていれば、ファイル内容を比較するツールなどを使って、修正箇所を割り出すことが可能です。

そのため、定期的にシステムの自動バックアップが必要なケースがあります。

もちろん、バージョン管理ツールを使っても大丈夫なのですが、バックアップという意味合いだけで言うなら、Cronを利用するほうが簡単です。

定期的なログファイルのクリーンアップ

ログファイルは、システムを修正する際や、バグの調査をする際に非常に重要です。

ログがあまり残っていないシステムは、調査に多くの時間がかかってしまいます。

一方で、ログファイルが多いと、サーバーの容量を圧迫してしまう危険性があります。

また、ログと言っても、数年前のログは不要ですし、これらのファイルが残っていることで、容量を圧迫してしまっては、「安全なシステム運用」という観点からすると本末転倒です。

これらのログファイルを定期的にクリーンアップするのも、Cronの利用用途としては多いです。

例えば、日毎にログファイルを作成し、ファイル名にログを作った日付を付けておく。

そうすることで、Cronでファイル名を元に定期的に1年以上前のファイルは消していく事も可能です。

ネットワークに存在する設備の監視

社内で利用している機器が、きちんとアクティブな状態かを判断する方法の一つとして
「ping」
が挙げられます。

pingは、機器がネットワークに接続されているのか・通信ができるのかを知る最も簡単なコマンドです。

このコマンドを組み込んだプログラムをCronで定期実行することで、機器がネットワークに接続できていない状態をいち早く知ることが出来ます。

特にシステムダウンで、多くのユーザーが被害を被るような仕組みの場合は、こういった監視のための仕組みを用意するのは非常に有効です。

メールサーバーの定期的な再起動

メールサーバーなど、企業においても複数のサーバーを利用することがあります。

しかし、サーバーは再起動をせずに常に稼働し続けると、下記のようなトラブルの危険性が増します。

パフォーマンスの低下
→サーバーが長時間稼働し続けると、システムリソースの消費やメモリリークなどにより、パフォーマンスが低下する可能性があります。
これにより、サービスの遅延やタイムアウトなどの問題が発生する可能性があります。

セキュリティの脆弱性
→サーバーが再起動しないで長期間動作し続けると、セキュリティの脆弱性が増加する可能性があります。
アップデートやパッチが適用されていない場合、攻撃者がシステムに侵入することが容易になる可能性があります。

システムクラッシュ
→システムが再起動されない場合、プロセスがフリーズしたり、メモリリークが発生したりすることがあります。
これらの問題が発生すると、システム全体がクラッシュする可能性があります。

メンテナンスの不備
→再起動しないでシステムを長時間動作させておくと、システムのメンテナンスが怠慢になる可能性があります。
たとえば、ディスク容量が枯渇したり、ログファイルが肥大化したりすると、システムが動作しなくなる可能性があります。

これらのリスクを回避するために、Cronを使って定期的にサーバーの再起動をするのが良いです。

特に、Cronは自動実行が可能なので、
・昼休憩など誰も業務をしていないタイミング
・トラブルや問い合わせが多くなるより少し早いタイミング
・業務終了後の深夜など、他のプログラムも起動しないタイミング
など、他のシステムへの影響が少ない時間帯に再起動をすることが可能です。

更に、「再起動し忘れ」のようなヒューマンエラーも防止できます。

データベースの自動バックアップの作成

データベースの情報を自動的にバックアップすることも可能です。

データベースは、日々その情報が変わっていきます。

そのため、もしもトラブルが起きた時(特に停電などのトラブル)に
「1日前の状態に戻す」
ということが難しいです。

戻せるようにするためには、定期的なバックアップをとっておくことが重要で、それをCronで実現することが可能です。

メールマガジンの日時指定配信

マーケティングにおいて、メルマガは非常に有効な手段です。

定期的にお客さんに情報を発信することで、興味を持続させたり、「欲しい」と思ってもらえるような働きかけができます。

この定期的な情報発信も、Cronを行うことで実現可能です。

最近は、LINEステップなどのような仕組みも出てきていますが、より簡単に、より安価にするならCronからの実行を検討してみる余地があるでしょう。

Cronの書き方と設定方法

では、具体的にどのようにCronを設定していくのかを見ていきましょう。

レンタルサーバーの場合には、管理画面から操作することが可能です。

レンタルサーバーの場合には、契約内容によって、Cronが使えない事もあるので、事前にしっかりとチェックしておきましょう。

Cronの基本構文

レンタルサーバーではない場合、コマンドは下記のような形式で表記します。

* * * * * command

頭の「*」から順に
・分
・時
・日
・月
・曜日
を意味しており、
「いつ・どんなコマンドを実行するのか」
を表しています。

【具体例】毎週月曜日の午前2時に実行する場合
【コマンド】
0 2 * * 1 /path/to/command

【具体例】毎月1日の午前3時に実行する場合
【コマンド】
0 3 1 * * /path/to/command

【具体例】毎日午前8時から午後5時までの間、1時間ごとに実行する場合
【コマンド】
0 8-17 * * * /path/to/command

【具体例】5分おきに実行する場合
【コマンド】
*/5 * * * * /path/to/command

【ポイント】
分に「/5」を付ける事で、5分おきを実現できます。

「/path/to/command」と記載した部分には、自分で作ったプログラムファイルを記載することも可能で、phpファイルやシェルスクリプトを実行することも可能です。

Cronの設定ファイルの編集

CRONの設定ファイルは、通常、
「/etc/crontab」
に保存されています。

このファイルを編集することで、CRONジョブを設定することができます。

また、それ以外にもコマンドで動かす方法もあります。

cronを開く:crontab -e
cronの表示:crontab -l
cronの削除:crontab -r

業務効率化はAMELAに

今回は、Cronについて見てきました。

多くのシステム開発において
「定期的にプログラムを実行する」
ということは、非常に重要です。

夜間に定期的にプログラムを実行する物を
「夜間バッチ」
などと呼ばれたりしますが、これらはシステムを安全に、安定して運用するために非常に重要な要素です。

しかし、自社で開発したシステムを、上手く自動的に運用するのは、意外と難しいです。

そこで、今の運用方法を見直す意味合いでも、是非一度AMELAにご相談下さい。

AMELAでは、いくつもの業界で業務システムを開発してきた経験もあるため、御社が
「長期的に安定したシステム運用」
をするための最適な提案が可能です。