sixcoreのcronでphpを実行する

root権限がもらえずsshも使えないレンタルサーバで一体何にcronを使用するのか以前から不思議だったが、使う機会があった。詰まったのでそのときのメモ。

phpが叩けない

一定時間毎にphpスクリプトをcronで実行しようとしたところ、動作しなかった。
動作しないというのは、phpコマンドの後に>でリダイレクトしてもブランクファイルが出力され、sixcoreのcron通知機能(結果をメール送信)もメールが送信されないという状況。
そしてsixcoreのcronに関するマニュアルは物凄く簡素で情報が少ない。

今回書いたcron設定はこれ。

* * * * * php /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

※どのユーザで実行されているかは不明な為省略

ちなみに実際のphpスクリプトでは、一定時間毎にIMAPでメールを取得し、内容をDBに蓄積するというようなことをしようとしていた。

wgetかcurlを使うと動く

phpが何らかの原因により実行できないことが確認できたので、次に試したのはwgetとcron。apacheを介してphpは実行できるので、任意のパスにphpを設置し、次のようなcronを書けば良い。

* * * * * wget http://advpro.co.jp/hoge/test.php

または、

* * * * * curl http://advpro.co.jp/hoge/test.php

出力が必要なときはリダイレクトする(要らなくても多分>/dev/nullしたほうがいい)。
あとは外部から実行されないように、.htaccessで制御しておけばとりあえず要件は満たせる。

実はコマンドが違った

調べたところ、「php53」としておけば普通に動く事がわかった。
cronで ls -la /usr/bin した結果、

-rwxr-xr-x  1 root root    2866944 Mar 24  2014 php
-rwxr-xr-x  1 root root    2878552 Mar 24  2014 php-cgi
-rwxr-xr-x  1 root root       1123 Mar 24  2014 php-config
lrwxrwxrwx  1 root root         27 Aug 28  2013 php5.2 -> /usr/bin/org/php5.2/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php5.3 -> /usr/bin/org/php53/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.4 -> /opt/php-5.4.26/bin/php-cgi
lrwxrwxrwx  1 root root         27 Mar 28  2014 php5.5 -> /opt/php-5.5.10/bin/php-cgi
lrwxrwxrwx  1 root root         26 Aug 28  2013 php53 -> /usr/bin/org/php53/php-cgi

となっていたので、必要なバージョンのリンクを叩けば良い。
今回の例では、

* * * * * php53 /home/<アカウント名>/advpro.co.jp/public_html/hoge/test.php

上記のように変更したところ動作した。
sshログインできないんだからこれくらいはマニュアルに書いて欲しい。

その他

cron設定について色々いじっていたところ、時刻指定は通常のcronと同様に設定できることがわかった。「*」は当然使えるし、「*/n」も使える。恐らく入力値をそのままファイルに追記しているんだろうと思う。
ちなみに、sixcoreのcron設定では分に「*」を指定すると、負荷掛けたら利用制限するという旨のメッセージが表示されるが、「*/1」としておけば表示されない。どっちにしても負荷掛けたら怒られるだろうけど。