cronについて

時々、cron(クローン)とは何ですかと聞かれることがあります。 cronが使えると色々便利なことがあります。

cronって何?

一言で言うと、タイマー機能のことです。
UNIX系OS(レンタルサーバーはほぼUNIX系OSです)の機能の1つで、指定した時間になったら、指定したコマンドを実行してくれます。 定期的に同じ処理を繰り返し行うこともできます。
ビデオ予約を思い浮かべてください。
  • x月x日xx時xx分、チャンネルAの録画を開始する
  • 毎週z曜日のドラマBを録画する
  • etc.
という具合に予約しますよね。

これと同じで、
  • x月x日xx時xx分、○○コマンドを実行する
  • 毎週y曜日のyy時yy分、△△コマンドを実行する
  • etc.
という具合に予約し、目的の処理を自動で実行させます。

どんな時に使うの?

定期的に、自動で、何かを処理したいときcronを使います。
  • 一週間に一度、データベースに登録したデータをバックアップしたい
  • 毎日x時になったらメールを配信したい
  • 毎時y分にTwitterにつぶやきを投稿したい
  • 毎月末に支払いを行いたい
  • etc.
これらの処理は、手動でも行えますが、ほどんどの人は自動化したくなるでしょう。 ここで、cronの出番となるわけです。
サーバーで自動的に動かしたいコマンドは人それぞれだと思います。自分が何を自動化したいか思い浮かべてみてください。

ソフトウェアを自動実行する場合、まずはサーバーにインストール

サーバーにあるファイルのコピー、データベースのバックアップ、といった既にサーバーにある機能を自動実行したい場合は、ソフトウェアをインストールする必要はありません。
ですが、ステップメールを配信したい、Twitterに投稿したい、などソフトウェア(ツール)の機能を自動実行したい場合、まずは使いたいソフトウェアをサーバーにインストールします。
自動実行を想定しているソフトウェアなら、自動実行するためのスクリプトファイルが用意されているので、cronで定期的に実行すればよいのです。
どのファイルを実行すればよいかは、各ソフトウェアのヘルプやマニュアルに書かれています。分からない場合は販売元に問い合わせましょう。

cron設定はレンタルサーバーのマニュアルを確認

cronに登録して、自動実行させたいスクリプトファイルがわかったら、いよいよcronへ実行を登録します。
しかし、ここで注意が必要です。cronはUNIXつまりサーバーの機能だということです。ステップメールや自動投稿などのソフトウェアの機能ではないということです。

炊飯器のタイマー機能を利用してご飯を炊く時を思い出してください。 お米を洗い、適量の水を入れ、炊飯器にお釜を入れ、タイマーをセットしますよね。
cronを使った自動実行に置き換えると、炊飯器がサーバー、お米がソフトウェアということになります。
炊飯器Aで米Aを炊く(サーバーAでソフトウェアAを使う)こともあれば、同じ炊飯器Aで米Bを炊く(サーバーAでソフトウェアBを使う)こともあります。
またお米Aを炊飯器Aで炊く(サーバーAでソフトウェアAを使う)ことも、炊飯器Bで炊く(サーバーBでソフトウェアAを使う)こともあります。

しかし、共通しているのは、タイマー機能は必ず炊飯器にあるということです。米にタイマー機能はありません。
つまり、自動実行機能cronはサーバーにあるのです。ソフトウェアではないのです。
炊飯器と米の例だと、何を分かりきったことを、と思われる方がほとんどでしょう。 しかし、サーバーとソフトウェアの話になると、こんがらがって分けが分からなくなってしまう人がいらっしゃいます。

cronはサーバーの機能ですから、cronの設定はレンタルサーバーのマニュアルを見て行うことになります。
ソフトウェアによっては、主なレンタルサーバーのcron設定方法を紹介している物もありますが、全てのレンタルサーバーを網羅できるわけではありません。
対してレンタルサーバーは自分の会社のサービスですから、cronが利用できる所はマニュアルを用意しているところがほとんどです。

cronの設定方法はレンタルサーバーによってまちまちです。サーバーAでこう設定したから、サーバーBも同じだろう、というのは通じません。
少しでも簡単にcronの設定ができるようにブラウザから設定できる機能を提供してくれているレンタルサーバーもあれば、シェルスクリプトを作成するレンタルサーバーもありますし、crontabコマンドから設定するレンタルサーバーもあります。 必ずお使いのレンタルサーバーのマニュアルに従って設定してください。

また、レンタルサーバーによっては、cronは使えないところもあります。 使えるけど設定方法はサポート外のところもあり、この場合は自分で色々調べて設定していかなければいけません。

cronの設定項目

cronの設定は初めは難しく感じる方が多いと思います。
結構分かりにくい項目をいくつか設定しなければいけません。その1つでも間違うと動かない事が多いです。

cronの記述は、
実行間隔(実行時間) コマンド
のようになります。
例えば、毎日7~8時台に10分おきに、/home/public/programs/run.shを実行する場合、
*/10 7-8 * * * /home/public/programs/run.sh
のように書きます。
*/10 7-8 * * * ⇒ 実行間隔
/home/public/programs/run.sh ⇒ コマンド
です。

PHPやPerlなどを実行したい場合は、スクリプトファイルの絶対パスに加え、言語の絶対パスも追加して書きます。
*/10 7-8 * * * /usr/local/bin/php /home/public/programs/run.php
/usr/local/bin/php ⇒ 言語の絶対パス
/home/public/programs/run.php ⇒ スクリプトファイルの絶対パス

初めてcronを使う時は、PHPやPerlなどのスクリプトを動かすケースが多いと思いますので、以下PHPを例に書いていきます。
前述しましたが、cronの設定方法は
  • 【実行間隔】と【言語の絶対パス スクリプトファイルの絶対パス】の2つに分けて管理画面から設定
  • 【言語の絶対パス スクリプトファイルの絶対パス】をシェルスクリプトへ登録し、管理画面から【実行間隔】と【シェルスクリプトへの絶対パス】を設定
  • 【実行間隔 言語の絶対パス スクリプトファイルの絶対パス】をcrontabから編集して登録
  • etc.
など本当にまちまちなので、お使いのレンタルサーバーのマニュアルを必ず確認して設定してください。

以前シェルスクリプトを登録しないといけないサーバーの管理画面で、スクリプトファイルを登録して、動かないと激怒していた人がいました。間違うと動きませんので。

動かないときはブラウザから

cronを設定したのに動かない場合、まずはブラウザからスクリプトファイルを実行してみましょう。 ブラウザからスクリプトファイルへアクセスすれば実行できます。
スクリプトファイルのURLが何になるのかは、サーバーのヘルプやマニュアルを確認してください。
cronよりブラウザの方が敷居が低いので、動かしやすい場合が多いです。 また、エラーが起こった場合、ブラウザに表示されることもあるので、cronより確認が簡単なことが多いです。

ブラウザから実行して動かない場合、まずcronでも動きません。 ブラウザでも実行できない場合は、ソフトウェアの設定が何か間違っていないか確認してみてください。

実行結果の確認方法

ブラウザから動くようになったら、次はcronで動くように設定していきます。
通常のレンタルサーバーでは、実行結果をメールで受け取るように設定ができます。少なくとも安定稼働が確認できるまでメールで実行結果を受け取る事を強くお勧めします。 ファイルに書き出すコマンドもありますので、そちらの方が便利な方はファイルに書き出してください。
実行できたか、何が原因でエラーになったのか、など実行結果をメールで送ってくれるので確認ができます。 レンタルサーバーのマニュアルに設定方法が載っていると思います。

またコマンドの最後に【 > /dev/null 2>&1】などを付けて、エラーを破棄するように書いている場合は、少なくとも安定稼働するまでは外してください。エラーを確認できなくなります。
例えばこんな記述です。
*/10 * * * * /usr/local/bin/php /home/public/programs/run.php > /dev/null 2>&1
これだとエラーが確認できなくなってしまいますので、
*/10 * * * * /usr/local/bin/php /home/public/programs/run.php
のように【 > /dev/null 2>&1】を付けずに実行します。

実行間隔はテストが終わるまで、5分~10分間隔で動かすのが良いかもしれません。 レンタルサーバーによってはcronの実行間隔が30分、60分おきでないとダメなところもありますので、使っているレンタルサーバーに合わせて設定してください。

原因の切り分け

実行結果がメールで送られてきていると思いますので、エラー内容を確認してください。
cronで動かない場合、確認するポイントは通常、
  • スクリプトファイルのパーミッション
  • スクリプトファイルへのサーバーパス
  • Perl、PHPといった言語のバージョン
この3つです。

スクリプトファイルのパーミッション

スクリプトファイへのアクセス権がないという主旨のエラーが起こっている場合、スクリプトファイルのパーミッション(権限)を確認してください。
スクリプトファイルのパーミッションは、レンタルサーバーのヘルプやマニュアルの通りに設定すれば動きます。
レンタルサーバーのマニュアル通りにしても動かない場合は、パーミッションを色々変更してみるか、お使いのレンタルサーバーに問い合わせをしてみてください。

スクリプトファイルへのサーバーパス

スクリプトファイがないとう主旨のエラーが起こっている場合、スクリプトファイルへのサーバーパス(単にパスとも言います)を確認してください。パスは絶対パスを記述してください。
サーバーパスはブラウザからアクセスするURLとは異なります。
これもレンタルサーバーのヘルプやマニュアルに書いてあります。 通常は【/home/public/・・・】というような形式です。サーバーパスには、実行するスクリプトファイルまで書いてくださいね。 中にはスクリプトファイルを書かずに『動かない』と悩む人もいます。 実行するスクリプトファイルが【run.php】の場合、【/home/public/programs/run.php】のようになります。

スクリプトファイルではなく、includeやrequireしようとしているファイルがないとう主旨のエラーが起こっている場合、cronで実行ディレクトリを変更する必要があるかもしれません。 ブラウザで実行することを前提にしているスクリプトファイルの場合、特に注意が必要です。
【/home/public/programs/run.php】を実行したい場合、
cd /home/public/programs ; /usr/local/bin/php run.php
です。
実行間隔も書くと、
*/10 * * * * cd /home/public/programs ; /usr/local/bin/php run.php
です。
(以前上の例では動かず、
cd /home/public/programs && /usr/local/bin/php run.php
に変更したら動いたというユーザー様がおられました。摩訶不思議。コマンドに見えないゴミでも入っていのかな?)

Perl、PHPといった言語のバージョン

関数がない、実行できないなどのエラーが出ている場合、Perl、PHPといった言語のバージョンが違うのかもしれません。ソフトウェアが動作確認しているバージョン以外だと動かないことがあります。
cronで設定した言語の絶対パスを動作確認されているバージョンに変更してください。 上の例だと、【/usr/local/bin/php】の部分です。
例えばPHP5.5で動かしたい場合は【/usr/local/bin/php55】、PHP7.0で動かしたい場合は【/usr/local/bin/php70】など、言語のバージョンを絶対パスで指定します。
これもレンタルサーバーによって当然パスが異なりますので、お使いのレンタルサーバーのマニュアルを確認してください。
Webページで動いているバージョンと、cronで動いているバージョンが異なることもありますので注意してください。

単純なスクリプトを実行してみる

それでも動かない時は、簡単なスクリプトを動かしてみるといいかもしれません。
例えばPHPの場合、
<?php
 echo phpversion();
?>
などです。
成功していればcronの実行結果通知メールアドレスに、cronで動いているPHPのバージョンが送られてきます。
どのPHPバージョンでも動くのでバージョン問題を考えなくてすみますし、ディレクトリを変更する必要もないので、原因の切り分けが簡単になります。

*/10 * * * * /usr/local/bin/php /home/public/programs/run.php
を動かしている場合、
上のPHPのバージョンをエコーするスクリプトを【run.php】で保存、
サーバーにある【run.php】をリネーム、
その後作成した【run.php】をサーバーにアップロード、
パーミッションの設定をして、
cronから動かしてみてください。
言語のパスを変更したり、ディレクトリを移動したり、色々な設定で動かし、どのコマンドが動いて、どのコマンドが動かないかで、原因の切り分けができます。

動くようになったら、実行間隔を動かしたい設定にします。
5分おき、毎時20分、毎週水曜日、毎月5日、毎年1月1日、などの設定ができます。 自分の理想に近いタイマーを設定してください。

どうしてもご自分では設定が無理なときは

ネットビジネス便利ツールでは、インストール代行も受けております。
必ずお受けできるわけではありませんが、まずはご連絡ください。