search
LoginSignup
31

More than 5 years have passed since last update.

posted at

updated at

cronの走らせかた

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
みたいな感じで(未検証)

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
31