最近はTwitterのBOTを作っているのですが、BOTを定期的につぶやかせるにはcrontabが必須です。crontabで相対パスが含まれたPHPスクリプトをそのまま実行すると、正しく動いてくれません。crontabでの実行時はカレントレディレクトリが変わるようなのです。そのため、パスに関しては気を使う必要があります。スクリプトに絶対パスを書くのも汎用性が落ちるので$_SERVER[‘DOCUMENT_ROOT’]を使おうと思ったのですが、どうやら空になってしまうようです。以下は空になってしまうことを確認するためのコードです。
Posts Tagged ‘cron’
2011年02月23日に投稿
[Movable Type]日時指定投稿を行う
動作確認:Movable Type Pro 4.261
MTには日時を指定して記事を公開する機能があります。この機能を使用するにはcrontabを利用します。
手順は下記の通りです。
パスを控える
MTを構成するファイル群の中にrun-periodic-tasksというファイルがあります。
MTをインストールしたディレクトリの絶対パスを /var/www/html/mt とすると、
このファイルの位置は/var/www/html/mt/tools/run-periodic-tasksになります。
このファイルまでの絶対パスをメモしておきます。
パーミッションの変更
run-periodic-tasksのパーミッションを755に変更します。
タスクの登録
crontabにタスクを登録します。
ここで、15分おきや30分おきなど実行タイミングに関する設定を行います。
実行コマンドはcd /var/www/html/mt; ./tools/run-periodic-tasksとします。
以上で終了です。実際に記事を時間指定投稿して動作確認を行って下さい。
※実行コマンドはcdコマンドを使ってカレンドディレクトリを変更する必要があるようです。
cdコマンドを使用せずに /var/www/html/mt/tools/run-periodic-tasks でタスクを登録すると
動作しませんでした。
2010年06月24日に投稿
PHPプログラムにブラウザでアクセスすると実行されるが、cronで実行できない
cronでPHPプログラムを実行しようとした際に
ブラウザでアクセスすると実行されるのですが
cronの定期実行では実行されない現象に出くわしました。
今回動かなかった原因はinclude関数とパスの関係を
理解していなかったためでした。
そのプログラムにはinclude関数で他のファイルを読み込んで
いたのですが、相対パスの指定がまずかったようです。
(PEARのMDB2.phpです。)
cronで実行するプログラム内でincludeやrequireを使用する場合は
絶対パスを指定するか、include_pathの通っているディレクトリから相対パスを
指定する必要があります。
これは、ブラウザでアクセスした時とcronから実行する時ではv
カレントディレクトリが異なるためとのことです。
これを理解するのに
下記のページが参考になりました。
http://q.hatena.ne.jp/1211819991
読み込むファイルが少ない場合は絶対パスを指定すれば問題ありませんが
PEARのようないくつファイルが読み込まれるか分からないものについては
.htaccessやini_set()でインクルードパスを指定するのが現実的です。
インクルードパスを設定する方法は
下記のページが参考になります。
http://www.findxfine.com/php/720.html
http://side-b.sto.co.jp/weblog/archives/163
http://maihy.com/hp/phptech/phptech_incpath.html