• ベストアンサー

cronで動かすと保存されなくなる

レッツPHPさんの写メールBBSを使わせていただいています。 送られてきたメールを解析し画像とログを保存するプログラム(pop.php)だけを 使いPOP3サーバのアドレスやパスワードなど設定し、携帯から送信しました。 そしてpop.phpにアクセスするときちんと画像と送信内容が書き込まれました。 これを利用して、cronで一定時間にpop.phpを起動させているのですが、 保存も送信内容も書き込まれません。 また、cronとは別なアドレスを用意し指定する宛先にメールが届いたらpop.phpを起動するというのも試しましたが保存されません。 ―――――――――― フォルダ構成です pop.php  //受信・解析 data/s //画像 mail.cgi //送信内容保存ファイル ―――――――――― また、どちらも動いています。(動いているか確認するために自分宛にメールを送信する処理を加えてみました。) WEBからアクセスするのとcronなどでプログラムを呼び出すのは違うのでしょうか。 エラーもなくWEBからアクセスすると保存されるので悩んでおります。 どなたかご教授いただけませんでしょうか。 よろしくお願い致します。

  • PHP
  • 回答数4
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • ikiss
  • ベストアンサー率43% (34/79)
回答No.2

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 の前にちゃんと時間指定はしてますよね?

99Micchi
質問者

お礼

$_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

その他の回答 (3)

  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.4

失敗しているということは、何かしらエラーメッセージが届いていないでしょうか(postmaster宛等) ファイル自体が見つからないという旨の英文とか実行したphp側で吐くエラー文とかです ファイルが見つかっていないと届いたけどphpまでのパスが確実にあっているならば、 ディレクトリ構成の認識にずれが生じてる可能性があります /home/***/public_html/***/pop.php の部分を cd /home/***/public_html/***/ ./pop.php もしくは cd /home/***/public_html/***/; ./pop.php に変更してみてください(cd -> チェンジディレクトリ) もしかしたらこれで実行されるかも、です 詳しいことにはお答え出来る知識はないのですが、経験談として参考までに

99Micchi
質問者

お礼

せっかく回答いただいたのですが確かめることができない状態ですので 後ほど検証してみます。 ありがとうございました。

99Micchi
質問者

補足

ご回答ありがとうございます。 設定をしている者に検証をお願いしているのですがまだの状態です。。 アドバイスいただいた内容を実行しましたら結果ご報告いたします。 よろしくお願いいたします。

  • ikiss
  • ベストアンサー率43% (34/79)
回答No.3

ちょっと気になるのですが、shファイルに追加とはどういう 意味でしょうか? 何か違う気がします。 crontabコマンドで設定しているのですよね? 一般的にCRONの書式はこんな感じになるはずです。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin 01 * * * * aaa.php ちょっとcrontab -l と打って、 書いている中身を出してください。 そしてここに出してもらえますか? 都合の悪いところは伏せてもらってかまいません。

99Micchi
質問者

お礼

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)
回答No.1

たぶん、CRONに設定した情報に不備があるのだと思います。 そして想像ですが、CRONを設定をした時にpop.phpの パスを通しましたか? どこにあるかというのはCRONはわかってくれません。 その情報も記載してあげないと駄目ですよ。

99Micchi
質問者

お礼

ありがとうございます。 cronではshファイルを呼び出し #!/bin/sh /home/***/public_html/***/pop.php pop.phpの先頭に #!/usr/local/bin/php -q というようにしています。 pop.phpでDBに接続するファイルをincludeしていますが、 DBに書き込まれいるのでpop.php以外はいいのかなと勘違いしていました。 足りない設定はどのよなものでしょうか。 よろしくお願いします。

関連するQ&A

  • cronで外部ファイルへアクセス

    はじめまして。分からない事あり、質問させて頂こうと、アカウントを取得いたしました。 cronが使える共有レンタルサーバー内に、ある簡単なメールが送信されるファイルを置きました。cronテストのために設置したファイルで、アクセスされるとメールが送信されるだけのものです。(ブラウザ経由でアクセスしてもメールが送信されます) そこで、以下のようなファイルを作成し、cronにて日時設定を行うと、正常にメールが配信されるまで確認いたしました。(mail.phpとは上記メール配信ファイルです) #!/bin/sh #PHP /usr/local/bin/php /~~~~~~/cron_test/mail.php exit 他方、あるレンタルサーバーを借りているのですが、そこではcronが使えません。 そこで、アクセスされたらPHPが働くファイル(access.phpとします)を置き、cronが使える上記サーバーで定期的にそのaccess.phpにアクセスしたらどうか?と考えに至りました。 要は、cronが使えない以下のサイト(ファイル)にcronを使ってアクセスしたいといった感じです。 http://○○○.com/access.php ここで質問なのですが、上記のような一連のcronの中で、mail.phpにあたるスクリプトはどのようなものになるのでしょうか? echo"<img src=\"http://○○○.com/access.php\">"; と記述しているのですが、失敗に終わってしまいます。 前置きが幾分長くなってしまいましたが、この外部ファイルをアクセスするためのソースが分からず困っている次第です。 お忙しい中恐縮ですが、アドバイスのほど宜しくお願い致します。

    • 締切済み
    • PHP
  • cronの稼動時刻について

    質問させていただきます。 cronで22時にメール送信処理が入っているphpファイルをキックし、メール送信するフローになっています。 このphpプログラムを手動で叩くとリアルタイムでメール送信され、あて先に自身を入れておくとリアルタイムで受信します。 しかし、cronでキックされたphpプログラムにより送信されたメールはなぜか翌朝の10時に受信します。 サーバー内のログには22時に実行されたログが残っております。 この謎の意味がわかる方がおりましたらお助けください。

  • cronでphpを実行できない

    cronでphpを一部実行できない状態です 試しにメール送信処理のphpを作りcronで実行しまして送信できました しかし、mysqlで情報を取得しそれをメール送信するphpをcronするとNGです。 上記phpはブラウザからは問題なく処理できます 実行権限などでしょうか? 詳細な解決策を知っている人は教えていただきたいです

    • ベストアンサー
    • PHP
  • cronで実行するプログラムにアクセス制限をかけたいです。

    cronで実行するプログラムにアクセス制限をかけたいです。 cron.phpをcronで3時間に1回実行しているのですが、誰かがこのcron.phpに直接アクセスしてきても同様のプログラムが実行されてしまいます。 これをcronからのみ実行できるように制限をかけたいのですが、どのようにするのが一般的なのでしょうか?.htaccessの基本認証等を使用するのですか? よろしくお願いしいます。

  • xreaでのCronの設定について

    xreaでのCronの設定について どうしても解決出来ないので質問させて頂きました。 やりたい事は毎時一回 /public_html/cache_cron.phpを稼働させたいです。 現在の設定はxreaのCRONジョブの編集画面にて 分 時 日 月 曜日 0 * * * * /virtual/*****/public_html/cron1.sh 分 時 日 月 曜日 0 * * * * /virtual/*****/cron1.sh 始めは上の設定だけだったのですが動かないので下の設定も追加しました。 cron1.shは /public_html/cron1.sh /cron1.sh の両方にアップしています。 これも始めは/public_html/cron1.shだけにアップしてたのですが動かなかったので追加でアップしました。 アップ方法はffftpでのアスキーモードでcron1.shの改行もLFです。 パーミッションは705です。 cron1.shの中身は #!/bin/sh #PHP /usr/local/bin/php /virtual/*****/cache_cron.php /usr/local/bin/php /virtual/*****/public_html/cache_cron.php exit です。 cache_cron.phpにブラウザで直接アクセスすると希望通りの処理は行われます。 このファイルのパーミッションも705です。 一応確認でcache_cron.phpの最後に自分の携帯にメールを送信するプログラムも追加しているのですが、 直接アクセスしない限りメールは来ません。 他に必要な情報があれば書くので宜しくお願い致します。

    • 締切済み
    • PHP
  • cronでメールを送信すると文字化けが起こります。

    一昨日にcronというものを知って、いろいろと弄り始めた初心者です。 cronで毎時1分にメールを送信させようと思いました。 cron1.sh というシェルスクリプト(?)で sendmail.php を実行させようとしています。 ---- cron1.sh ---- (保存形式は[UTF-8] 改行コードは[LF]) #!/bin/sh #PHP export LANG=ja_JP.jis /usr/local/bin/php /virtual/example/public_html/example.com/mail/sendmail.php exit ----------------- ---- sendmail.php ---- (保存形式は[UTF-8] 改行コードは[CR+LF]) <? $strMailFrom = "example@example.com"; // $header = "Content-Type: text/plain;charset=iso-2022-jp\r\n"; $header = "From: ".$strMailFrom; mb_language("Japanese"); $address = 'example2@example.com'; $subject = '件名です'; $message = "本文です"; if(mb_send_mail($address, $subject, $message, $header)){ print("メール送信完了"); }else{ print("送信に失敗"); } ?> --------------------- ちなみに起動させることまでは上手く行ったのですが、cronを経由して送信させたメールは文字化けが起こってしまいます。 また、実行結果メールも文字化けになっています。 (メーラーは Outlook です。) ちなみに、sendmail.php から直接のメール送信では文字化けは起こりませんでした。 いくつか自力で調べてみたところ、環境変数に問題があるのかと思ったので、export LANG=ja_JP.jis の部分を、LANG=ja_JP.eucJP、LANG=ja_JP.sjis に変えてみたりしたのですが結果は変わらず。 ファイルの保存形式自体がダメなのか、もしくは何か根本的な部分がダメなのかわかりません。レンタルサーバーのため一時間に一度しかcronで起動させることができないので、なかなか問題解決に至りません。 よろしければ良いアドバイスをください。お願します。 PHPも先月学んだばかりで、最近になってはじめて文字コードや文字化けというものを意識するようになったばかりの初心者です。何か不足している情報などありましたら、補足させていただきます。

    • 締切済み
    • PHP
  • cronが動かない

    cronからphpスクリプトを動かそうと設定したのですが動きません。 エラーメールやエラー表示もされません。 phpスクリプト自体は、cronを使わず手動なら動作しています。 どこか設定に異常個所などがあればご指摘やアドバイスなど頂きたいと思います。 以下に設定内容を記載します。 【crontab】 # crontab -u testuser -e 0-59/5 * * * * /usr/bin/php -q /home/testuser/public_html/mail.php 2>&1 0-59/10 * * * * /usr/bin/php -q /home/testuser/private_html/mail.php 2>&1 【cron確認】 # ls -l /var/spool/cron/ -rw------- 1 root root 251 4月 17 15:25 testuser -rw------- 1 root root 71 4月 16 18:28 root 【mail.php】 #!/usr/bin/php <?php $tim = time(); $today = gmdate("Y/m/d(D)",$tim+9*60*60); $now = gmdate("Y/m/d(D) H:i",$tim+9*60*60); mb_language("Ja") ; mb_internal_encoding("EUC-JP") ; $mailto="test@****.jp"; $mailfrom = "From:" .mb_encode_mimeheader("cronテスト") ."<" . $mailto .">"; $parameters = '-f' . $mailto; $return_path = "$mailto"; $subject="テストメール"; $body ="クーロンテスト\n"; $body .="送信年月日: $today \n"; $body .="送信時間: $now \n"; mb_send_mail( $mailto, $subject, $body, $mailfrom,"-f $return_path" ); ?> 【パーミッション】 /home/testuser/public_html/  705 /home/testuser/private_html/ 705 /home/testuser/public_html/mail.php 705 /home/testuser/private_html/mail.php 705 rootユーザーでのcronは正常に動いています。 ご教授の程、宜しくお願い致します。

  • PHPファイルをcronで実行するには…?

    ご質問させてください。 私はさ○らインターネットを使っていて、そこで cron設定をしてあるPHPファイルを実行したいを考えています。(このPHPファイルというのはメール送信のファイルです。) いろいろなサイトを探し回って設定の方法を調べたら、実行コマンドに cd /home/○○/www/; ./○○.php もしくは /usr/local/bin/php -f /home/○○/www/○○.php  と記述すれば大丈夫ということなのですが、これが全く起動していないようなのです。 そもそも cron ではPHPを起動できないのでしょうか?ご存知の方がいらっしゃいましたらご教授お願いいたします!

    • ベストアンサー
    • PHP
  • cronでcgiやphpを定期的に実行させたい

    cronが使用できる、レンタルサーバを利用しており、cronの設定はWEB上からコントロールパネルへアクセスして、日時やコマンドを入力できるようになっています。 cronで定期的にphpやcgiを実行させたいと思うのですが、このような事は可能でしょうか? 初めてcronに挑戦してみようと思っていますので、詳しくアドバイスを頂けると助かります。 よろしくお願いします。

  • cronが実行されているのに動作しない

    phpファイルをcronで設定したのですが動作しません。 『cat /var/log/cron』にて確認をすると正常に実行されています。 実行はされているが、処理されないということになります。 何がだめなのでしょうか? cron設定 * * * * * /user/bin/php /var/www/public_html/test/mail/test.php test.php <?php require( '/var/www/private_html/test/data.php' ); $to_mail = "test@****.jp"; $m_title = "cronテスト"; $s_name = "メールテスト"; $return_mail = "test@****.jp"; mb_language( 'ja' ); mb_internal_encoding("utf-8") ; $subject = "$m_title"; $headers= "From:" .mb_encode_mimeheader( $s_name ) ."<" .$s_mail .">"; $return_path = '-f' . $return_mail; $body = "メール送信テスト\n\n"; mb_send_mail( $to_mail, $subject, $body, $headers, $return_path ); ?> 以上のphpファイルをcron設定しており、 URLを直接たたくとphpファイルは処理されることも 確認済みです。 cronからの実行だとなぜファイル処理がなされないのでしょうか? 原因がわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう