2

SendGrid と cron に基づく自動メール サービスを実行しようとしています。PHP インタープリターがスクリプトを実行できるように、考えられるすべての組み合わせを試しました。cron ログにはジョブが毎分実行されると書かれていますが、定義したログ ファイルは空のままで、メールも受信されません。ブラウザ経由でページにアクセスすると、すべて正常に動作します。

mydev.com は、自分のマシンで使用している仮想ホストであり、php 構成 (最大実行時間など) に変更を加えていません。

また、私はオンラインで調査を行い、php5-cli がインストールされており、必要なすべての依存関係があります。

以下は、ターミナルで sudo crontab -e と入力した後に cron ファイルに追加した行です。

* * * * * php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null
* * * * * /usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null
* * * * * /usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null

* * * * * /usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null

そして、ここにcronログの出力があります:

Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8948]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8947]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8949]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8953]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8964]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8966]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8965]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8970]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8992]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8994]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8993]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8998]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9009]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9011]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9012]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9010]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php   >> /var/www/mydev/CRON_LOG.txt 2> /dev/null)

どんな助けでも大歓迎です!.

O.

編集:

以下は、実行されるはずのコードです。

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/mailingService.php');

$myMail = new mailingService();
$myMail->execute();
$myMail->outputDuration();

?>

今、「echo 1;」を追加しても ファイルの先頭または末尾では、何も大きく変化せず、出力ファイル CRON_LOG.txt は空のままです

4

2 に答える 2

1
          • php /var/www/mydev/dev/mailServiceTest.php

「php」は cron デーモンのパスにありますか?

          • /usr/bin/php /var/www/mydev/dev/mailServiceTest.php

より良い (これが php の正しいパスであることを確認しましたか?

ほとんどの場合、これは理にかなっていますが、1 分に 1 回の頻度でコマンドを実行する必要がある場合、cron 経由で実行することは理想的な解決策とはほど遠いものです

私のスクリプトはDOCUMENT_ROOT SERVERスーパーグローバルを使用しています

しかし、それは意味がありません/CLI SAPI には無効です

これはあなたが期待することをするつもりはありません。

うまくいくかもしれませんが、lynx はユーザー主導のブラウザーとして意図されており、おそらくこのコンテキストでは起動さえしないでしょう - wget または curl の方が良いでしょう。

cron ログから、crond は本来あるべきことを正確に実行しています。

STDERR を破棄しているということは、多くのエラー メッセージが表示されないことを意味します。また、STDOUTに役立つものも書いていません。ターゲット ログ ファイルのタイムスタンプは更新されていますか?

crontab ファイルをインストールしましたか、それとも編集しただけですか?

DOCUMENT_ROOT が必要な場合は、HTTP 経由でスクリプトにアクセスする必要があります。システムが独自の名前を解決し、wget または curl を使用できることを確認してください (つまりwget http://mydev.com/dev/mailServiceTest.php、ssh セッションから試してください)。

于 2013-04-15T12:36:58.217 に答える