- ベストアンサー
cronで動かすと保存されなくなる
レッツPHPさんの写メールBBSを使わせていただいています。 送られてきたメールを解析し画像とログを保存するプログラム(pop.php)だけを 使いPOP3サーバのアドレスやパスワードなど設定し、携帯から送信しました。 そしてpop.phpにアクセスするときちんと画像と送信内容が書き込まれました。 これを利用して、cronで一定時間にpop.phpを起動させているのですが、 保存も送信内容も書き込まれません。 また、cronとは別なアドレスを用意し指定する宛先にメールが届いたらpop.phpを起動するというのも試しましたが保存されません。 ―――――――――― フォルダ構成です pop.php //受信・解析 data/s //画像 mail.cgi //送信内容保存ファイル ―――――――――― また、どちらも動いています。(動いているか確認するために自分宛にメールを送信する処理を加えてみました。) WEBからアクセスするのとcronなどでプログラムを呼び出すのは違うのでしょうか。 エラーもなくWEBからアクセスすると保存されるので悩んでおります。 どなたかご教授いただけませんでしょうか。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DBに接続するファイルがincludeされているとしても そのファイルが何の変数を使用しているかは不明ですよね? たとえば環境変数とか。 で、そういったファイルはよくPATH変数を見ていることが多いんですよ。 ですので、サーバでCRONを動かすときには、環境変数のPATHも 指定してあげるべきです。 ほとんどのDB接続ファイルは環境変数を使用しますから。 OSはlinuxかFreeBSDあたりですよね? まず環境変数を表示しましょう。 ENVコマンドです。 その中でPATH=からはじまる記述があると思います。 その記述をCRONにも同じ内容でいれてあげてください。 こんな感じ #!/bin/sh PATH=環境変数のPATHの値 /home/***/public_html/***/pop.php そんなことはないと思いますが、 /home/***/public_html/***/pop.php の前にちゃんと時間指定はしてますよね?
その他の回答 (3)
- suzuki-_-
- ベストアンサー率77% (152/195)
失敗しているということは、何かしらエラーメッセージが届いていないでしょうか(postmaster宛等) ファイル自体が見つからないという旨の英文とか実行したphp側で吐くエラー文とかです ファイルが見つかっていないと届いたけどphpまでのパスが確実にあっているならば、 ディレクトリ構成の認識にずれが生じてる可能性があります /home/***/public_html/***/pop.php の部分を cd /home/***/public_html/***/ ./pop.php もしくは cd /home/***/public_html/***/; ./pop.php に変更してみてください(cd -> チェンジディレクトリ) もしかしたらこれで実行されるかも、です 詳しいことにはお答え出来る知識はないのですが、経験談として参考までに
お礼
せっかく回答いただいたのですが確かめることができない状態ですので 後ほど検証してみます。 ありがとうございました。
補足
ご回答ありがとうございます。 設定をしている者に検証をお願いしているのですがまだの状態です。。 アドバイスいただいた内容を実行しましたら結果ご報告いたします。 よろしくお願いいたします。
- ikiss
- ベストアンサー率43% (34/79)
ちょっと気になるのですが、shファイルに追加とはどういう 意味でしょうか? 何か違う気がします。 crontabコマンドで設定しているのですよね? 一般的にCRONの書式はこんな感じになるはずです。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin 01 * * * * aaa.php ちょっとcrontab -l と打って、 書いている中身を出してください。 そしてここに出してもらえますか? 都合の悪いところは伏せてもらってかまいません。
お礼
cronで呼び出すファイルはpop.shなのですがそこに追加しました。 >その記述をCRONにも同じ内容でいれてあげてください。 というところを理解していませんでした。すみません。 cronでの設定は他の者がしているのでcrontabの内容を表示してもらいました。 # /**/*** - root's crontab for FreeBSD # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # #minute hour mday month wday who command # */5 * * * * root /usr/libexec/** # # rotate log files every hour, if necessary 0 * * * * root newsyslog # # do daily/weekly/monthly maintenance 1 3 * * * root periodic daily 15 4 * * 6 root periodic weekly 30 5 1 * * root periodic monthly # # time zone change adjustment for wall cmos clock, # does nothing, if you have UTC cmos clock. よろしくお願いします。
- ikiss
- ベストアンサー率43% (34/79)
たぶん、CRONに設定した情報に不備があるのだと思います。 そして想像ですが、CRONを設定をした時にpop.phpの パスを通しましたか? どこにあるかというのはCRONはわかってくれません。 その情報も記載してあげないと駄目ですよ。
お礼
ありがとうございます。 cronではshファイルを呼び出し #!/bin/sh /home/***/public_html/***/pop.php pop.phpの先頭に #!/usr/local/bin/php -q というようにしています。 pop.phpでDBに接続するファイルをincludeしていますが、 DBに書き込まれいるのでpop.php以外はいいのかなと勘違いしていました。 足りない設定はどのよなものでしょうか。 よろしくお願いします。
お礼
$_ENV["PATH"];で($_SERVER["PATH"]も同じ値でした) /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin のように出たのでshファイルに追加しましたが、保存されませんでした。 同じくWebからアクセスすると保存されます。 試しにpop.phpの先頭にも 付け足してみましたが同じ結果です。 OSはFreeBSDでcronの時間も設定しています。 また、$log="./mail.cgi "; $lines = @file($log); というのがあり配列の中身をメールに送信して見ると $lines0=$lines[0]; $lines1=$lines[1]; 今送ったものと前回送った内容が表示されます。 (これは期待通りです) しかし、mail.cgi のサイズはゼロで何も書き込まれていません。 実際にmail.cgi を開いていないという事でしょうか。 何度も申しわけありませんm(__)m