- - PR -
cronでコマンドが実行されない
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-10 11:42
Weaselと申します。お世話になります。
RHEL4.0WSでcrom(crontabs-1.10-7)が正しく動作せずに困っております。 おわかりになる方がいらっしゃれば、アドバイスお願いいたします。 -- 現在の設定では、二つのグループを設定しています。 ・グループ「yasai」に、ユーザ「kabocha」と「tomato」 ・グループ「fruit」に、ユーザ「banana」と「apple」 なぜか「kabocha」と「tomato」ではcronが実行できるのに 「banana」と「apple」ではコマンドが実行されません。 /var/log/cron には「UNSAFE」としか記録されません。 ちなみに、cron.allowには使用するユーザ名を全て記載 してあります。 コマンドは、検証のためシンプルなものを使用しました。 * * * * * echo "abc" しかし、実行結果をリダイレクトすると実行されます。 * * * * * echo "abc" >> /home/wa_dentsu/cronlog2.txt 上記だと運用が面倒なので、できればcronからそのままメール できるようにしたいです。 | ||||||||||||
|
投稿日時: 2005-05-10 23:53
こんばんは。
お話を拝見した限りでは、cronジョブが動作しないのではなく、cronジョブの出力が正常にメール送信されないことが問題と思えます。恐らくですが、cron ではなく sendmail の問題では無いでしょうか?
こちらはもうちょっと具体的に載せないと、アドバイスし辛いように思います。それと、maillog からも関連するログを抜き出すと良いのではないでしょうか。 もし sendmail の問題だった場合…、詳しくないので一言だけですが、あるバージョン以降の sendmail ではホームディレクトリに group もしくは other の write権限があると、セキュリティ上 UNSAFEと判断してローカル配送を拒否するらしい…と聞いたことがあります。 以上、ご参考まで。 | ||||||||||||
|
投稿日時: 2005-05-11 13:58
ご返答ありがとうございます。
「cronではなくSendmailに問題があるのではないか?」ということですが、 試しに簡単なテキストを保存するコマンドを実行したところ、何も出力 されませんでした。多分、Cronジョブ自体が実行されていないようです。 /var/log/maillogも調べましたが、RelayがRejectされたような記録は 見つからなかったです。 /var/log/cron以外に手がかりらしきものがなく、当方も困惑しております。 Cronをデバックモードで動かす方法、なんてあるのでしょうか? > もし sendmail の問題だった場合…、詳しくないので一言だけですが、 > あるバージョン以降の sendmail ではホームディレクトリに group > もしくは other の write権限があると、セキュリティ上 UNSAFEと > 判断してローカル配送を拒否するらしい…と聞いたことがあります。 各ホームディレクトリは設定したままで、所有者以外に読み書き実行の 権限は付与されてなかったです。 こちらから有用な情報を提供できず、申し訳ございませんが、気づいた ことがあればアドバイスお願いいたします。 | ||||||||||||
|
投稿日時: 2005-05-11 15:36
こんにちは。
Weaselさんは、上のように判断されていますが、その根拠が見えない…というのが現状ですね。 最初に載せていた、
これを見る限りでは、実行に失敗しているようには考えられないからです。 実際に crontab に登録して試されたコマンドや、実行の正否の判断基準とされたモノ、詳細なログ、maillog であればジョブ実行時刻の部分を一通り見てみる…等が具体的にないと、これ以上は何とも言えないように思います。
最悪、strace を使用して解析することはできると思います。(RHEL4で試したことは無いですが…) 最凶のデバッグツールですよ。 [ メッセージ編集済み 編集者: angel 編集日時 2005-05-11 15:52 ] | ||||||||||||
|
投稿日時: 2005-05-11 16:18
お返事ありがとうございます。
私が「cronジョブが動作していない」と思う根拠は次の通りです。不明な点が あれば、お手数ですがご指摘願います。 1 Cronログを確認したところ、次のような結果であった。 /var/log/cron.1:May 5 03:00:01 sc-cs01 crond[26980]: (banana) CMD (/home/banana/bin/process.pl) /var/log/cron.1:May 5 03:00:01 sc-cs01 crond[26979]: (banana) UNSAFE (banana) この「process.pl」は処理に10分くらいかかるので、まったく同じ時間に UNSAFEと記録されているということは、処理自体が開始されていない可能性 が高い。 2 テキストファイルを保存するスクリプトを作成し、Cronに登録した。 -- #!/usr/bin/perl -w open(OUT, ">>test.log"); print OUT "Hello\\n"; close OUT; -- cronログにはUNSAFEと記録され、「test.log」は保存されていない 3 maillogを確認したところ、ユーザ「banana」の送信記録は見つからない。 また、Cronを設定した午前3時台にも、それらしきメールは確認できない。 > 最悪、strace を使用して解析することはできると思います。 > (RHEL4で試したことは無いですが…) > 最凶のデバッグツールですよ。 http://japan.linux.com/desktop/03/10/28/1054253.shtml 便利そうなツールですが、何か問題とか副作用とかあるのでしょうか? | ||||||||||||
|
投稿日時: 2005-05-11 19:19
こんにちは。RHEL4 なのに、「SELinuxは?」という突っ込みを忘れていたなぁ…と少し後悔。
折角なので、少しだけ crond について調べてみました。 ※独自調査なので、裏付けは無いものと思ってください。 どうやら UNSAFE というのは、crond がメール送信先アドレスを独自にチェックした結果、安全でない送り先だと判断したときに出るメッセージのようです。 ( 環境変数 MAILTO、設定していない場合はユーザ名を見て、特殊文字が入っているとアウト ) ですので、sendmail の問題かも知れないという私の推測は、どうやら外れていたようです。 なお、この機能は古い crond では存在しないようです。 ただし、UNSAFE と判断されてメール送信がない場合でも cronジョブの実行には直接は関わり無いように思えます。 なぜなら、メールを送信する/しないに関わらず、ジョブの出力は必ず crond プロセスが全部受けるからです。つまり、メール送信の過程と、ジョブ実行に直接の関係は無いのです。 ( メールを送信する場合は、受けた出力を改めて sendmail プロセスに流す ) 今回の件は、UNSAFE と判定された点がまず不可解ではあるのですが、ジョブ実行に関しては別の原因があるように思えます。 で、それはユーザ固有かどうかは現時点では断定できないかと思います。 ※ おそらく、“touch /tmp/hoge”みたいなジョブであれば正常に実行されるのでは?
副作用は…、恐らく少しシステム負荷が高くなります。( そんな気にする程ではないでしょう ) 問題は…、その解説記事にもある「確かに、出力は少々わかりづらいが」に集約されています。何せ strace を使っていると周囲から変人扱いされますからねぇ…。私の経験上。 以上、ご参考まで。 [ メッセージ編集済み 編集者: angel 編集日時 2005-05-11 19:20 ] | ||||||||||||
|
投稿日時: 2005-05-12 20:26
返信ありがとうございます。
Cronが問題なく動作しました。ありがとうございます!!! > ( 環境変数 MAILTO、設定していない場合はユーザ名を見て、特殊文字が > 入っているとアウト ) とありましたが、実はユーザ名が「aa_bbbb」とアンダーバーを含んだ名称 でした。そこで、「MAIL=aaa@bbb.co.jp」と違うサーバのメールアドレスを 指定したら問題なく動作するようになりました。 「_」というのは「特殊文字」になるのでしょうか? | ||||||||||||
|
投稿日時: 2005-05-12 23:30
こんばんは。上手くいったようで何よりです。
それにしても…
アンダーバーが引っかかりますか orz それは想像していませんでした。 ちなみに、UNSAFE の詳しい判定については、 ・英数以外の文字が先頭に来ると UNSAFE ・@!:%-., 以外の非英数文字が含まれると UNSAFE (つまりアンダーバーでも UNSAFE) となるようです。…余計なことをする crond だと思ってしまうのは私だけでしょうか。 メールアドレスの判定くらい、MUAなりに任せればいいのに…。 RFC2822にもあってなさそうですし…。 ※ Bugzillaに投稿しようかな… まぁ、何にしても解決されたようで良かったです。一応他の方もご注意を。 それでは。 |