Edited at

cronの走らせかた

More than 5 years have passed since last update.


cronでphpとかrubyとかのスクリプトを動かしたいとき


例えば5分毎に動かしたい

*/5 * * * * /usr/bin/php /home/hogehoge/works/hogehoge.php

と書く。phpスクリプトが一つのファイルで構成されている場合ならば、これでも動く。複数のphpファイルが、相対パスでincluderequire__onceとかされている場合、エラーで動かない。

実行時のカレントディレクトリが変わってしまうため、ファイルを参照出来ないから。


解決案


  • includeやrequireするときに絶対パスを書く


    • まあめんどうだよねってことと、OSが違った場合、パスを書き換えないといけないので、現実的では無い。



  • (php限定)ini_setでinclude_pathを設定する


    • レンサバとかで有効そう



  • シェルスクリプトを書いて、そいつを実行する


    • 今回これやった




超簡単なやつ

cron実行時のカレントディレクトリを変えてしまえば良い。

まず、phpのパスを確かめておく。(which phpとかwhich rubyなど)


sh

cd /home/hoge/works/

user/bin/php /home/hoge/works/hogehoge.php

で、このshファイルを実行してあげれば良い

*/5 * * * * /bin/sh /home/hogehoge/works/cron.sh

でもよく考えたら、cronで実行するときにカレントディレクトリを変えてあげればいいんじゃね?

*/5 * * * * cd /home/hogehoge/works/ && /usr/bin/php /home/hogehoge/works/hogehoge.php

みたいな感じで(未検証)


だれかもっと良い方法ご存じでしたら教えてください


参考にしました。ありがとうございます