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 件のコメント:
コメントを投稿