結果を確認するために1つのphpファイルを作成したので、cronジョブを設定する必要があります。
結果が送信されるように、30分ごとに実行するように設定しました。ただし、30分ごとにcrontabが実行されなかった理由はわかりません。
Crontabを設定する方法は次のとおりです。
*/30 * * * * php /var/www/html/result.php
ファイルディレクトリが正しいことを確認しました。タイミングの部分についてはわかりません。*/30 * * * *
または30 * * * *
を使用することはできませんか? */30 * * * *
を設定しましたが、機能しませんでした。
与えられた
*/30 * * * * php /var/www/html/result.php
それが機能しない理由は複数あります。
まず、php /var/www/html/result.php
の単純な実行かどうかを確認することが重要です。これは必須です。しかし残念ながら、これを達成しても問題が解決されるわけではありません。
php
バイナリのパスを追加する必要があります。
*/30 * * * * php /var/www/html/result.php
に変更されます
*/30 * * * * /usr/bin/php /var/www/html/result.php
またはwhich php
から来るものは何でも。
Crontabを実行しているユーザーに対するスクリプトの権限を確認してください。
ファイルに実行権限を付与します:chmod +x file
。また、スクリプトを実行する権限を持つユーザーがcrontabを起動していることを確認してください。また、ユーザーがファイルが配置されているディレクトリにアクセスできるかどうかを確認します。
安全のために、スクリプトの先頭に次のようなphpパスを追加することもできます。
#!/usr/bin/php -q
<?php
...
?>
ユーザーがcrontabを使用する権限を持っていることを確認してください。彼が/etc/cron.d/deny
ファイルにいるかどうかを確認します。また、基本的なテストを行って、それがcrontanbまたはphpの問題であるかどうかを確認します。
* * * * * touch /tmp/hello
スクリプトの結果をログファイルに出力します。 William Niuが提案 。
*/30 * * * * /usr/bin/php /var/www/html/result.php > /tmp/result
-f
オプションを使用して、スクリプトを実行します。
*/30 * * * * /usr/bin/php -f /var/www/html/result.php > /tmp/result
Crontabの形式が正しいことを確認してください。たとえば、サイト Crontab.gur を使用してこれを行うことができます。
要約すると、考えられる理由はたくさんあります。それらの1つは問題を解決する必要があります。
Phpがパスにないことが原因である可能性があります。 crontab
のpath
はごくわずかです。したがって、phpプログラムのフルパスを含めてください。
出力をファイルにパイプすることでcronコマンドをテストできます。
*/30 * * * * php /var/www/html/result.php > /tmp/result.log
このリファレンスページ から、「Crontab環境」の下:
cronは、シェル(/ usr/bin/sh)を使用してユーザーのHOMEディレクトリからコマンドを呼び出します。 cronは、すべてのシェルにデフォルト環境を提供し、以下を定義します。
HOME=user’s-home-directory
LOGNAME=user’s-login-id
PATH=/usr/bin:/usr/sbin:.
Shell=/usr/bin/sh
また、/30
構文はすべてのプラットフォームでサポートされているとは限らないため、代わりに0,30
に変更してみてください。
同様の問題がありました。コマンドラインからは機能しましたが、cronからは機能しませんでした。
私のphpコードにdbのものの "include(" ./ connect.php ");がありました。
それを削除し、connect.phpコードをphpスクリプトに直接追加すると、cronから機能しました。
私はこれに関して面白いものを持っていました。私のスクリプトは手動で実行されますが、crontabからは実行されません。
スクリプトはファイルの場所ではなく/usr/bin/php
から実行されていたため(手動で実行した場合のように)、私のphp require
は必要なファイルを見つけられませんでした。完全なアドレスを反映するように変更すると、修正されました。
/usr/bin/php -f /var/www/myfile.php
としてスクリプトを実行することによるトラブルシューティングは、問題を見つけるのに役立ちました
Ubuntu 14.04.1
でも同様の問題が発生しましたが、問題はcrontabを変更する方法であることが判明しました。
Sudo crontab -e
だけでなくcrontab -e
を使用していたため、変更が無視されました。
スクリプトが直接機能する理由(メールでGmailアカウントにデータを送信するため)に戸惑った1日後、URLをクリックすると、すべての意図的な送信が機能し、すべてのcron送信がスパムになっていることがわかりました。理由はわかりませんが、共有したいと思いました。
実行されていませんか? execを使用する場合は、cronから実行しており、すべてのフルパスが必要であることに注意してください。したがって、cp
の代わりに、/bin/cp
を使用する必要があります。
*/30 * * * * wget http://my.domain.com/path/to/php/result.php
を使用できます
ただし、Crontabは、crontab -e
を実行した現在のユーザーを使用してタスクを実行します。 wgetを使用する場合、www-data
ユーザー/グループペアを使用してApacheによって処理されます
まず、スクリプトが期待どおりに機能することを確認します。
$ php /var/www/html/result.php
次に、Apacheユーザーアカウントのcrontabを編集します
$ Sudo crontab -u www-data -e
または
$ Sudo crontab -u root -e
次に、crontabを追加し、ログファイルに出力します。
*/30 * * * * php /var/www/html/result.php > /tmp/result.log
ウィレムの答えは私に道を示した。私の場合、コード内に「include( "connection.php")」があります。 connection.phpを/my/full/path/connection.phpに変更しました。相対パスを使用したrename()呼び出しがいくつかあり、絶対パスに変更しました。それは私のために働いた。私はそれが他の誰かを助けることができることを願っています。
簡単で論理的な方法:
/ var/log/cronでcronログを確認すると、非常に役立つ情報が得られます。
少ない/ var/log/cron
例えば。、
私のcronエントリは* * * * * /usr/bin/php /cat.php
<==毎分cat.phpを実行する
ログファイルには、cronエントリが実行されるたびに、以下のようなエントリが含まれます。
Jan 24 08:06:01 OlaTower CROND[13641]: (root) CMD (/usr/bin/php /cat.php)
Jan 24 08:07:01 OlaTower CROND[13641]: (root) CMD (/usr/bin/php /cat.php)
ここでは、phpコマンドが毎分実行され、ログファイルに毎分エントリがあります。
エントリがない場合、crondはそのcronジョブを選択していません。ログエントリがあり、それでも目的の出力が得られない場合は、コマンド/アプリケーションロジックに問題があります。