CRON(クローン)とは?
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
皆さんは「CRON(クローン)」という仕組みをご存知ですか?
クローンと言っても、クローン人間などのクローンとは違います。
CRONとは、プログラムを定期的に自動実行させる仕組みのことをいいます。
本格的なWebアプリケーションを構築していく上では、必要になってくることも多いので、この機会に是非覚えておきましょう!
CRONとは?
Webプログラムは基本的に、ユーザーの操作を起点として動きます。
例えば、
・ブラウザでURLにアクセスされたらこの処理を行う。
・表示された画面でボタンが押されたらこの処理を行う。
といった感じですね。
つまり、ユーザーが何らかの操作を行ってくれないとプログラムは動くことが出来ないわけです。
ちなみに、JavaScriptのタイマー処理などで、ユーザーの操作とは別にバックグラウンドでプログラムを呼び出すことは出来ますが、これもあくまでユーザーがそのページをブラウザで開いていることが前提となります。
しかし、指定した時間になったらバックグラウンドでユーザーにメール配信を行ったり、時間がかかる重い処理などをアクセスの少ない夜中に自動実行したり、定期的にバックアップ処理を実行したりなど、ユーザーの操作を起点とせずバックグラウンドで処理を実行したい場合もあります。
そんな時に使うのが「CRON」という仕組みです。
CRONは、サーバーの持つ機能の1つで「指定した時間に、指定したプログラムを動かしてくれる仕組み」です。
CRONに自分が作成したPHPのプログラムを登録しておけば、指定した時間になったら、そのプログラムを自動的に実行してくれるというわけです。
CRONの実行タイミングは、
・X月X日X時X分に実行
・毎月1日のPM12時に実行
・毎週月曜のAM8時に実行
・毎時0分に実行
といったように柔軟なスケジューリングが可能です。
CRONの設定方法
CRONに対応しているレンタルサーバーであれば、管理画面から簡単に設定することが出来ます。
例えば、さくらインターネットの場合は、「スクリプト設定」から「CRON設定」をクリックし
「スケジュール追加」をクリックします。
ここでCRONを登録することができます。
毎時0分に実行したい場合は、
・月、日、時は全てを意味する「*」アスタリスクを指定
・分に「0」を指定
・曜日は全てにチェック
そして、実行コマンドの部分に、実行させたいPHPファイルを指定します。
CRONでPHPを実行させる場合は、PHP本体のパスを最初に書き、それに続けて実行したいプログラムファイルを指定します。
例えば、/home/webというフォルダの中にあるtest.phpを実行したい場合はこんな感じです。
/usr/local/bin/php /home/web/test.php
PHP本体のパスは、サーバーごとに異なりますので、事前に確認しましょう。
そして、「保存する」をクリックすればCRONの登録は完了です。
ただ、レンタルサーバーの場合は、そもそもCRONに対応していなかったり、設定数に上限があったりしますので、CRONをばりばり使っていく場合はクラウドサーバーも検討しましょう。
クラウドサーバーの場合は、上限なくCRONを自由に設定することが出来ます。
クラウドサーバーでCRONを設定するには、ターミナルでサーバーに接続後「crontab」というコマンドを使って行います。
以下を実行すると、現在設定されているCRONの一覧が確認でき、
crontab -l
以下を実行すると、CRONの内容を編集することが出来ます。
crontab -e
CRONは、このような書式で記述します。
分 時 日 月 曜日 コマンド
00 * * * * /usr/bin/php /home/web/test.php
より詳細な指定方法は、「crontab」といったワードで検索すると多くのページが見つかりますので興味があれば是非調べてみてください。
CRONプログラムを書く際の注意点
なお、CRONに指定するPHPプログラムを書く際の注意点として、通常のWebプログラムとは違うため、セッションやリクエストといったWeb上の仕組みは使うことが出来ません。
また、内部で別ファイルをインクルードする場合などは、絶対パスで表記するようにしましょう。
CRONの活用事例
CRONを使うことで、例えば
・メールマガジンの自動配信システム
・BOT系のプログラム
・自動バックアップ
・データの自動集計
など、多くの自動化プログラムを作れるようになります。
例えば僕は、Twitter/Youtube/Facebookの登録者数を取得し、分析するツールを自作して使っているのですが、このデータ取得にもCRONを使っています。
WebAPIを使って、各サイトから登録者数を取得し、データベースを更新するというプログラムを作り、このプログラムを毎日0時にCRONで自動実行させています。
他にも、日々のアクセス数や、売上のレポートなども自動集計させたり、運営している各種WebサイトやWebサービスが正常に稼働しているかどうか自動的にチェックさせて、毎朝僕にメールを送るようにしています。
こんな感じで、CRONを活用しています。
CRONを使いこなせば、一度作ったプログラムを反復的に自動実行させ、本来自分が行う業務をプログラムにやらせて自動化することが出来ます。
まるで秘書のようですね。
CRONを使いこなし、Webアプリの機能をより便利にしたり、プログラミングで仕事を自動化していきましょう!