Help us understand the problem. What is going on with this article?

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

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away