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」としておけば表示されない。どっちにしても負荷掛けたら怒られるだろうけど。