残念な問題は、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

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

答え2

ランニングcrond

次のいずれかのコマンドを試してください。

pidof crond
pgrep -l crond
ps caxf | grep -6 crond --color

最後のコマンドの出力:

11881 ? S 0:00 \_ httpd 
11882 ? S 0:00 \_ httpd 
11883 ? S 0:00 \_ httpd 
11884 ? S 0:00 \_ httpd 
11885 ? S 0:00 \_ httpd 
11886 ? S 0:00 \_ httpd 
2098 ? Ss 0:01 crond             #this 'crond' is in red
2125 ? Ss 0:00 sudoscriptd 
2127 ? Ss 0:00 \_ sudoscriptd 
2136 tty2 Ss+ 0:00 mingetty 
2137 tty3 Ss+ 0:00 mingetty 
2138 tty4 Ss+ 0:00 mingetty 
2139 tty5 Ss+ 0:00 mingetty

構成は何ですかcrond

/etc/rc.d/init.dスタートアップファイルを確認してください/etc/init.d

構成を一覧crond表示できます。拒否されるまたは/および許可するユーザー。
これはあなたのユーザーですか?拒否される?次のファイルを確認してください。

   /etc/cron.allow
   /etc/cron.deny

両方のファイルが存在しない場合は、ルートのみ許可する。存在せず
空の場合、すべてのユーザーがcron.allowcron.deny許可する基本的に。

このファイルは/etc/crontabルートのみを書き込めなければなりません。

$ ls -l /etc/crontab
-rw-r--r-- 1 root root 255 Jul 15  2006 /etc/crontab

何とcrond

情報を受け取る自然な方法crondはローカルメールです。crond通常使用されますsendmailsendmail利用できない場合は、他のメールコマンドを指定できます(CRONDARGS="-mmail")。

crondただし、この手順では、直接ログを確認するのが最善です(ll /var/log/cron*)。

再起動crond

この問題は繰り返し解決することができますcrond

問題が解決しない場合は、再起動する前または実行せずにinit.dserviceのオプションを試してみましょう。

sudo クローン -p -x sch

そしてログファイルをもう一度確認してくださいcrond...

答え3

問題を発見しました。これ-C コマンドラインスイッチに送信するphp予定です。に送信する必要があります-c。なぜcron私に報告されていないのか分からない。どの有用な方法(または大文字Cを使用してインポートしましたが、crontabCLIで小文字でテストした方法)は言うまでもなく、同僚と一緒にCLIで再実行しました。突然、すべてが明らかになった。

今私はどれほど愚かな気分になりますか?

まあ、少なくとも今問題は解決され、cron私のスクリプトはスムーズに実行されます。助けてくれてありがとう。

関連情報