アップデート(そして壊す)詳細は下記をご覧ください。
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
動作していることを確認してください。
答え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.allow
cron.deny
許可する基本的に。
このファイルは/etc/crontab
ルートのみを書き込めなければなりません。
$ ls -l /etc/crontab
-rw-r--r-- 1 root root 255 Jul 15 2006 /etc/crontab
何とcrond
?
情報を受け取る自然な方法crond
はローカルメールです。crond
通常使用されますsendmail
。sendmail
利用できない場合は、他のメールコマンドを指定できます(CRONDARGS="-mmail"
)。
crond
ただし、この手順では、直接ログを確認するのが最善です(ll /var/log/cron*
)。
再起動crond
この問題は繰り返し解決することができますcrond
。
問題が解決しない場合は、再起動する前または実行せずにinit.d
別service
のオプションを試してみましょう。
sudo クローン -p -x sch
そしてログファイルをもう一度確認してくださいcrond
...
答え3
問題を発見しました。これ-C
コマンドラインスイッチに送信するphp
予定です。に送信する必要があります-c
。なぜcron
私に報告されていないのか分からない。どの有用な方法(または大文字Cを使用してインポートしましたが、crontab
CLIで小文字でテストした方法)は言うまでもなく、同僚と一緒にCLIで再実行しました。猿突然、すべてが明らかになった。
今私はどれほど愚かな気分になりますか?
まあ、少なくとも今問題は解決され、cron
私のスクリプトはスムーズに実行されます。助けてくれてありがとう。