レンタルサーバーのcronでphpを実行する方法

Pocket

レンタルサーバーでcronをまわしたいときに、

  • cronの実行間隔に制限がある
  • phpを実行するための設定が手間
  • 実行したいphpファイルのパスを全部絶対パスに変更するのが手間
  • パーミッションを設定し忘れると実行されない
  • 同じ時間で複数のcronジョブが実行されないことがある?

ということで、何かと手間。これをやや簡単にする方法を紹介する。

1. cronを一定間隔で実行する設定

レンタルサーバーによって実行間隔の制限があるが、それは1個の項目についての制限。なので、例えば10分おきに実行したければ、

00 *	*	*	*	/path/to/cron_10min.sh
10 *	*	*	*	/path/to/cron_10min.sh
20 *	*	*	*	/path/to/cron_10min.sh
...

といった具合に設定する。

2. 実行ファイルを作る

上記の例での cron_10min.sh を作る。
例えばこんな感じ:

#!/bin/sh
/usr/local/bin/php /path/to/cron_10min.php
exit

phpのパスはphpの場所を指定。2で指定しているphpも1で入れちゃうことは可能だが、phpのバージョンを指定したかったり、他にも色々とやりたいことがあると、*.shのほうで指定したほうが便利だと思う。
*.shを実行可能(755とか)にする。

3. 実行するphpファイルを作る

このcron_10min.phpで、実行するタイミングを指定する。例えば

if( date('i') == '20'){
    // DO STUFF
    if( date('H') == 8){
        // 8:20に実行したいことを記述
    }
}

みたいな具合に。このファイルも実行可能にする。

urlを叩く

実行するphpを公開ディレクトリに置いていたり、別のページのurlを叩きたい場合は、file_get_contents()を使う。これを許可していない場合も多々あるので、
get_url_contents()といった方法を使うと便利。
こうすると、ファイルのパスも絶対パスにしなくてもokだし、パーミッションも気にする必要がない。coreserverでも大丈夫w