残念な問題は、cronやsu -cが私のタスクを実行しないことです(権限?)

残念な問題は、cronやsu -cが私のタスクを実行しないことです(権限?)

アップデート(そして壊す)詳細は下記をご覧ください。

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

非常に便利なチャット会話そしてオックスリン、問題があるようですpamcronジョブを実行しようとするたびに、/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@domaincrontabファイルの上部にメールを送信する場所を指定することもできます。 (実際には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

動作していることを確認してください。

おすすめ記事