2013-09-25

Crontab が実行されない時には…?

Cron が定期的に実行されない時は様々な要因があると思いますが、今回は include_path に問題がある場合の解決法を紹介します。

[最終結論]
cd(change directory) でフォルダを移動してから PHPファイルを実行すると相対パスもうまくいく。


※ちなみに cronを使う前提として、

1、cron で .sh ファイルを実行。
2..sh に書いてあるコマンドで該当するPHPファイルを実行


という2段階で定期実行しています。
これは、Webサイトのデータ更新を自動で行うために、cronを使いたい。 というページでも言及されていますが、xrea もしくは coreserver からの名残です。


では、 まず 。

crontab -e

を実行して以下のように定期実行するコマンドを登録しましょう。

5  * * * * /home/[ユーザー名]/public_html/example.com/sh/test.sh

 
 ※パスは適宜ご自身のパスに置き換えてください。要するに上記の1番で説明した .sh ファイルがある場所です。つまり、わかりやす例えると実行したいPHPファイルが5つある場合は .sh ファイルも5つ必要ということです。(上級者はひとつのファイルにまとめるのでしょうが。)


そして、次に .sh の中身を見て行きましょう。上の例で言うと test.sh になります。


#!/bin/sh
cd /home/[ユーザー名]/public_html/example.com/cron
/usr/bin/test.php
exit



※ちなみに、これは実行したいphpファイルが /home/[ユーザー名]/public_html/example.com/cron にある場合です。
また、各行 Linux の改行コード 「LF」で改行されています。
ウィンドウズ版は CRLFなのでエラーの原因となります。


さて、流れを説明すると、

1、 実行したいフォルダに移動して
2.お目当ての phpファイルを実行する。

これだけです。
これだけですが、はじめにフォルダ移動しているので

require_once('../confing.php');

などの相対パスが要求されても、そこを基準としてファイルの読み込みがされる、つまりうまく実行できるということです。


今回の記事を書くにあたって以下のページを参考にさせていただきました。
ほんとうに助かりました。ありがとうございます!

[参考URL]
cron で PHP 実行時に require_once のファイルが参照できない

0 件のコメント:

コメントを投稿