アップデート(そして壊す)詳細は下記をご覧ください。
cronスクリプトを設定しましたが、なぜ実行されないのかをデバッグしようとしています。[コンテキストテストを中止してください。すべて動作します。改訂2参照詳細]役に立つ場合、コマンド自体は次のようになります(矢印は読みやすいように改行を示します)。
/usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
[権限テストが中止されました。下記をご覧ください。改訂2詳細]
(もう一度読みやすくするためにラップして)確認すると、crontab
次のような結果が得られます。
[blackero@XXXXXXXXXXX to]$ sudo crontab -u cronuser -l
MAIL="blackero@localhost"
30 9 * * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
20 18 7 * * cronuser /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
22 18 7 * * cronuser echo "Test" > /path/to/test.txt
↪ 2> /path/to/error.txt
アップデート#12012-02-08 12:32 Z
[スクリーンショット:すでに試しました。ドロバート~の提案(改訂3)]]cronuser
、スクリプトを正しく実行でき、両方のファイルに書き込むことができます.log
。 (スクリプトが実行する最初の作業process.php
はFTPを介してファイルをダウンロードすることです。これも正常に行われます。)しかし、その行を変更してもMAIL=""
(削除してMAILTO="blackero@localhost"
実行するように変更しても、私に電子メールは送信されません。) )
友達がもう一度試してみるように提案しました。
9 12 8 * * cronuser /bin/echo "Test" > /var/www/eDialog/test.txt
↪ 2> /var/www/eDialog/error.txt
私は試してみましたが、うまく/bin/echo
いかず、電子メールも生成されなかったのでパニックになりました。
アップデート#2公開日: 2012-02-08 19:15 Z
非常に便利なチャット会話そしてオックスリン、問題があるようですpam
。cron
ジョブを実行しようとするたびに、/var/log/cron
次の項目が表示されます。
crond[29522]: Authentication service cannot retrieve authentication info
crond[29522]: CRON (cronuser) ERROR: failed to open PAM security session: Success
crond[29522]: CRON (cronuser) ERROR: cannot set security context
次の行を追加してこの問題を解決しました/etc/shadow
。
cronuser:*:15217:0:99999:7:::
私が見つけたようにフォーラムで/etc/shadow
、ユーザーがいない場合、pam
セキュリティ要求は処理されません。 2番目の列として追加することは、*
ユーザーがパスワードを使用してログインできないことを意味します(ハッシュが指定されていないため)。問題を解決すると他のエラーが発生するため、/var/log/cron
詳細に調査した結果、crontab
毎回ユーザー名を指定したことがわかりました。
訂正すると、私がcrontab
今読んだ内容は次のようになります。
[blackero@XXXXXXXXXXX ~]$ sudo crontab -u cronuser -l
MAILTO="blackero@localhost"
30 9 * * * /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
52 18 8 * * /usr/bin/php -C /etc /path/to/process.php
↪ >>/path/to/stdout.log 2>>/path/to/stderr.log
9 12 8 * * /bin/echo "Test" > /path/to/test.txt
↪ 2> /path/to/error.txt
しかし/var/log/cron
今見せてください:
Feb 8 18:52:01 XXXXXXXXXXX crond[16279]: (cronuser) CMD (/usr/bin/php -C /etc
↪ /path/to/process.php >>/path/to/stdout.log 2>>/path/to/stderr.log)
そして何もstdout.log
入っていませんstderr.log
。メールが私に送信されず、他のファイルのエントリの/var/log/
どれも正しい時間枠にありませんでした。
ベストアンサー1
最初にcronジョブが失敗した場合、cronは電子メールを送信します。デフォルトでは、これはクローンジョブの所有者です。したがって、これらの電子メールはcronuser@localhostまたはroot@localhostに送信できます。適切なメールを確認してください。または、MAILTO=email@domain
crontabファイルの上部にメールを送信する場所を指定することもできます。 (実際にはMAIL=""
crontabの上に置かれているようです。少なくともman 5 crontab
私のマシンによると、そこにいる必要がありますMAILTO
。そしてあなたはいいえうまくいかない理由を見つけようとすると、エラーメッセージを捨てたい! )
第二に、cronが使用されます/bin/sh
。 bash拡張が必要な場合はこれを設定しますSHELL=/bin/bash
(再度crontabの上)。
第三に、まだ完全なテスト権限がありません。次の作業を行う必要があります。
# su -s /bin/sh -u cronuser
$ touch /path/to/stdout.log
$ touch /path/to/stderr.log
$ cat /path/to/process.php > /dev/null
$ exit
権限を徹底的に確認してください。cronuser
たとえば、+x が親ディレクトリにない場合があります。 (/usr/bin/phpも確認する必要があるようですが、それが正常だと思います)
最小環境でコマンドを実行してみることもできます。
# su -s /bin/sh -u cronuser
$ env - /bin/sh
$ /usr/bin/php -C /etc /path/to/process.php
動作していることを確認してください。