web-dev-qa-db-ja.com

cronジョブが実行されないのはなぜですか?

/etc/cron.d/mycronに次のようなcronジョブがあります。

0 3 * * * Apache php /path/to/my/script.php

同じファイルに、rootおよび他のユーザー(動作する)として実行を開始する他のcronジョブがありますが、何らかの理由で、Apacheとして実行されているこのジョブは実行されておらず、/var/log/messagesで何も報告していないか、 cronファイルのMAILTOアドレス。 su Apacheしてcronjobのコマンドを実行すると、正常に動作しますが、cronはそれを好みません。

これは私にとって長期にわたる問題であり、これまでに次の可能性を集めてきました。

  • Apacheユーザーにはホームディレクトリがなく(他のcronユーザーにはあります)、crondはこれを好みません。
  • /etc/security/access.confは完全にコメント化されていますが、crondを使用してApacheをブロックするPAMまたは/etc/security/access.conf設定がいくつかあります。
  • SELinux-これは通常、問題が本当に奇妙に見える場合の原因です。

この問題に関するアイデアや経験、および解決策は何ですか?

ありがとう

3
Tom
  • Cron構成でphpのフルパスを使用してみてください:/usr/bin/php
  • Apacheのホームディレクトリを確認してください:grep Apache /etc/passwd私の知る限り、ユーザーは常にホームディレクトリを持っている必要があります。/homeに存在しない可能性があります。
  • セキュリティイベントに関するsyslogメッセージを確認してください。これがPAMの場合、何かが表示されます
  • SELinuxを無効にしてみてください
1
Selivanov Pavel

ユーザーのホームディレクトリを設定する必要があります。ユーザーが持っていない場合は、cron.dファイルで直接指定できます。

おそらく、PATH =/usr/bin /も指定するか、コマンドのフルパスを指定する必要があります。

HOME=/tmp
0 3 * * *         Apache    /usr/bin/php /path/to/my/script.php
6
Tvartom

cronはデフォルトで、非常に限られたPATHで実行されます。 phpバイナリへのフルパスを入力する必要がありますか?

0
nickgrim