- PR -

cronでコマンドが実行されない

投稿者投稿内容
Weasel
会議室デビュー日: 2005/05/10
投稿数: 7
投稿日時: 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からそのままメール
できるようにしたいです。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-05-10 23:53
こんばんは。

お話を拝見した限りでは、cronジョブが動作しないのではなく、cronジョブの出力が正常にメール送信されないことが問題と思えます。恐らくですが、cron ではなく sendmail の問題では無いでしょうか?

引用:
/var/log/cron には「UNSAFE」としか記録されません。


こちらはもうちょっと具体的に載せないと、アドバイスし辛いように思います。それと、maillog からも関連するログを抜き出すと良いのではないでしょうか。

もし sendmail の問題だった場合…、詳しくないので一言だけですが、あるバージョン以降の sendmail ではホームディレクトリに group もしくは other の write権限があると、セキュリティ上 UNSAFEと判断してローカル配送を拒否するらしい…と聞いたことがあります。

以上、ご参考まで。
Weasel
会議室デビュー日: 2005/05/10
投稿数: 7
投稿日時: 2005-05-11 13:58
ご返答ありがとうございます。

「cronではなくSendmailに問題があるのではないか?」ということですが、
試しに簡単なテキストを保存するコマンドを実行したところ、何も出力
されませんでした。多分、Cronジョブ自体が実行されていないようです。
/var/log/maillogも調べましたが、RelayがRejectされたような記録は
見つからなかったです。

/var/log/cron以外に手がかりらしきものがなく、当方も困惑しております。
Cronをデバックモードで動かす方法、なんてあるのでしょうか?

> もし sendmail の問題だった場合…、詳しくないので一言だけですが、
> あるバージョン以降の sendmail ではホームディレクトリに group
> もしくは other の write権限があると、セキュリティ上 UNSAFEと
> 判断してローカル配送を拒否するらしい…と聞いたことがあります。

各ホームディレクトリは設定したままで、所有者以外に読み書き実行の
権限は付与されてなかったです。

こちらから有用な情報を提供できず、申し訳ございませんが、気づいた
ことがあればアドバイスお願いいたします。


angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-05-11 15:36
こんにちは。
引用:
「cronではなくSendmailに問題があるのではないか?」ということですが、
試しに簡単なテキストを保存するコマンドを実行したところ、何も出力
されませんでした。多分、Cronジョブ自体が実行されていないようです。


Weaselさんは、上のように判断されていますが、その根拠が見えない…というのが現状ですね。
最初に載せていた、
引用:
コマンドは、検証のためシンプルなものを使用しました。
* * * * * echo "abc"

しかし、実行結果をリダイレクトすると実行されます。
* * * * * echo "abc" >> /home/wa_dentsu/cronlog2.txt


これを見る限りでは、実行に失敗しているようには考えられないからです。
実際に crontab に登録して試されたコマンドや、実行の正否の判断基準とされたモノ、詳細なログ、maillog であればジョブ実行時刻の部分を一通り見てみる…等が具体的にないと、これ以上は何とも言えないように思います。
引用:
Cronをデバックモードで動かす方法、なんてあるのでしょうか?


最悪、strace を使用して解析することはできると思います。(RHEL4で試したことは無いですが…)
最凶のデバッグツールですよ。

[ メッセージ編集済み 編集者: angel 編集日時 2005-05-11 15:52 ]
Weasel
会議室デビュー日: 2005/05/10
投稿数: 7
投稿日時: 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
便利そうなツールですが、何か問題とか副作用とかあるのでしょうか?


angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-05-11 19:19
こんにちは。RHEL4 なのに、「SELinuxは?」という突っ込みを忘れていたなぁ…と少し後悔。

折角なので、少しだけ crond について調べてみました。
※独自調査なので、裏付けは無いものと思ってください。

どうやら UNSAFE というのは、crond がメール送信先アドレスを独自にチェックした結果、安全でない送り先だと判断したときに出るメッセージのようです。
( 環境変数 MAILTO、設定していない場合はユーザ名を見て、特殊文字が入っているとアウト )
ですので、sendmail の問題かも知れないという私の推測は、どうやら外れていたようです。
なお、この機能は古い crond では存在しないようです。

ただし、UNSAFE と判断されてメール送信がない場合でも cronジョブの実行には直接は関わり無いように思えます。
なぜなら、メールを送信する/しないに関わらず、ジョブの出力は必ず crond プロセスが全部受けるからです。つまり、メール送信の過程と、ジョブ実行に直接の関係は無いのです。
( メールを送信する場合は、受けた出力を改めて sendmail プロセスに流す )

今回の件は、UNSAFE と判定された点がまず不可解ではあるのですが、ジョブ実行に関しては別の原因があるように思えます。
で、それはユーザ固有かどうかは現時点では断定できないかと思います。
※ おそらく、“touch /tmp/hoge”みたいなジョブであれば正常に実行されるのでは?

引用:
> 最悪、strace を使用して解析することはできると思います。
> (RHEL4で試したことは無いですが…)
> 最凶のデバッグツールですよ。

http://japan.linux.com/desktop/03/10/28/1054253.shtml
便利そうなツールですが、何か問題とか副作用とかあるのでしょうか?


副作用は…、恐らく少しシステム負荷が高くなります。( そんな気にする程ではないでしょう )
問題は…、その解説記事にもある「確かに、出力は少々わかりづらいが」に集約されています。何せ strace を使っていると周囲から変人扱いされますからねぇ…。私の経験上。

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-05-11 19:20 ]
Weasel
会議室デビュー日: 2005/05/10
投稿数: 7
投稿日時: 2005-05-12 20:26
返信ありがとうございます。

Cronが問題なく動作しました。ありがとうございます!!!

> ( 環境変数 MAILTO、設定していない場合はユーザ名を見て、特殊文字が
> 入っているとアウト )

とありましたが、実はユーザ名が「aa_bbbb」とアンダーバーを含んだ名称
でした。そこで、「MAIL=aaa@bbb.co.jp」と違うサーバのメールアドレスを
指定したら問題なく動作するようになりました。

「_」というのは「特殊文字」になるのでしょうか?

angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-05-12 23:30
こんばんは。上手くいったようで何よりです。
それにしても…
引用:
> ( 環境変数 MAILTO、設定していない場合はユーザ名を見て、特殊文字が
> 入っているとアウト )

とありましたが、実はユーザ名が「aa_bbbb」とアンダーバーを含んだ名称
でした。そこで、「MAIL=aaa@bbb.co.jp」と違うサーバのメールアドレスを
指定したら問題なく動作するようになりました。


アンダーバーが引っかかりますか orz それは想像していませんでした。

ちなみに、UNSAFE の詳しい判定については、

・英数以外の文字が先頭に来ると UNSAFE
・@!:%-., 以外の非英数文字が含まれると UNSAFE (つまりアンダーバーでも UNSAFE)

となるようです。…余計なことをする crond だと思ってしまうのは私だけでしょうか。
メールアドレスの判定くらい、MUAなりに任せればいいのに…。
RFC2822にもあってなさそうですし…。
※ Bugzillaに投稿しようかな…

まぁ、何にしても解決されたようで良かったです。一応他の方もご注意を。
それでは。

スキルアップ/キャリアアップ(JOB@IT)