筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2011-12-05 Cannot 'start' sendmail の裏側
■ Cannot 'start' sendmail の裏側
初心者もOK! FreeBSD質問スレッド その111の sendmail に関する話題のまとめ。
/etc/rc.d/sendmail stop したら start できなくなってしまったという思い込みが発端。
948 :名無しさん@お腹いっぱい。:2011/12/05(月) 10:44:01.58 FreeBSDのデフォルトのメール配送ってどうなってるの? sendmail走ってたから /etc/rc.d/sendmail stop したらstartでけんくなってしまいますた。 defaults/rc.confみてたんだけどよくわからず。再起動すべきかとちょっと悩んでみたり。 どのスクリプトとか見たら良いですか?
ポイントとなるのは /etc/rc.d/sendmail のこの部分。
# If sendmail_enable=yes, don't need submit or outbound daemon if checkyesno sendmail_enable; then sendmail_submit_enable="NO" sendmail_outbound_enable="NO" fi # If sendmail_submit_enable=yes, don't need outbound daemon if checkyesno sendmail_submit_enable; then sendmail_outbound_enable="NO" fi
sendmail_enable="YES|NO" という変数は
- sendmail_submit_enable
- sendmail_outbound_enable
- sendmail_msp_queue_enable
という3つの変数の YES,NO を切り替えるのに使われているだけで、 sendmail_enable だけで sendmail のオンオフすべてを切り替えているわけではない。sendmail_enable は inbound 即ち外部からのメールを受け取るのに使用される変数。詳しくは man rc.sendmail を参照。
ところが rc.d/sendmail の15行目で呼んでいる /etc/rc.subr の659行目あたりでは
if ! checkyesno ${rcvar}; then if [ -n "${rc_quiet}" ]; then return 0 fi echo -n "Cannot '${rc_arg}' $name. Set ${rcvar} to " echo -n "YES in /etc/rc.conf or use 'one${rc_arg}' " echo "instead of '${rc_arg}'." return 0 fi
と書かれていて、[/usr/local]/etc/rc.d/foobar start などとした場合には rc.conf の foobar_enable 変数の値をチェックするようになっているので sendmail_enable="YES" でなければ
Cannot 'start' sendmail. Set sendmail_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.
という警告が出てしまう。しかし、先に述べたように sendmail は sendmail_enable だけで制御しているわけではないのでこれは必ずしも適切な警告ではない。
一方 /etc/defaults/rc.conf に書かれているデフォルト設定では
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO). sendmail_submit_enable="YES" # Start a localhost-only MTA for mail submission sendmail_outbound_enable="YES" # Dequeue stuck mail (YES/NO). sendmail_msp_queue_enable="YES" # Dequeue stuck clientmqueue mail (YES/NO)
となっていて、rc.conf に sendmail に関する記述を特にしていない場合に /etc/rc.d/sendmail start すると警告が出つつも sendmail はメール送信専用で起動するというわけ。
一連のやりとりすべて
948 :名無しさん@お腹いっぱい。:2011/12/05(月) 10:44:01.58 FreeBSDのデフォルトのメール配送ってどうなってるの? sendmail走ってたから /etc/rc.d/sendmail stop したらstartでけんくなってしまいますた。 defaults/rc.confみてたんだけどよくわからず。再起動すべきかとちょっと悩んでみたり。 どのスクリプトとか見たら良いですか?
949 : 忍法帖【Lv=7,xxxP】 :2011/12/05(月) 11:39:52.62 目的は何なの? start出来ればいいのか、startはどうでもよくてFreeBSDのメール配送の仕組みを知りたいのか、どっち?
950 :名無しさん@お腹いっぱい。:2011/12/05(月) 12:47:13.26 わかりにくくてごめんなさい。 defaults/rc.conf通りのまま/etc/rc.d/sendmail startしたらsendmail_enable=YESにしろって怒られて、 これで良いのかよくわからなかったので聞きました。 そしてsendmailが落ちてるホストでメールが送れなくて困ってました。 でも何かしらかsendmail: Queue runnerとかっていうのが起動したみたいでメールも送れるようになり、コレでいいのかな、って思ってます。
951 :名無しさん@お腹いっぱい。:2011/12/05(月) 13:31:55.47 # /etc/rc.d/sendmail stop Stopping sendmail. sendmail_submit not running? (check /var/run/sendmail.pid). Stopping sendmail_clientmqueue. # /etc/rc.d/sendmail start Cannot 'start' sendmail. Set sendmail_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'. # /etc/rc.d/sendmail status sendmail is running as pid 92163. sendmail_submit is running as pid 92163. sendmail_clientmqueue is running as pid 92167. # grep sendmail /etc/rc.conf #
952 :名無しさん@お腹いっぱい。:2011/12/05(月) 14:09:35.86 >>951 そんな感じで、 > Cannot 'start' sendmail. Set sendmail_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'. ってあったからこりゃダメなんだー、って思ってました。問題なさそうだったんですね。ありがとうございます。
955 :名無しさん@お腹いっぱい。:2011/12/05(月) 16:41:34.72 >>953 書いてある通りじゃなかったから質問したんじゃない? 通常rc.confにfoobar_enable="YES"と書いてないサービスは onestartで上げなきゃいけないけど、sendmailはその例外でstartでも上がる。
956 :名無しさん@お腹いっぱい。:2011/12/05(月) 16:56:57.43 startできないって書いているようにみえたが、startしてるのにstartしてないと思い込んだってことか。
957 :名無しさん@お腹いっぱい。:2011/12/05(月) 16:57:36.14 そのfoobarの部分と起動するコマンドがsendmailということに関係は無いし。 sendmail_enableはsendmail_submit_enable, sendmail_outbound_enable, sendmail_msp_queue_enableの YES NOの書き換えに使われてるだけw
958 :名無しさん@お腹いっぱい。:2011/12/05(月) 17:04:48.14 /etc/rc.d/sendmailみればわかるけどわかりにくいな。
959 :名無しさん@お腹いっぱい。:2011/12/05(月) 17:49:54.10 /etc/rc.d/sendmailにonestartやforcestartを使ったら死にそうな気もするがw
968 :名無しさん@お腹いっぱい。:2011/12/05(月) 23:28:20.70 >>957 関係ないのに sendmail_enable="YES" かどうかを start 時に見てて YES じゃなければ onestart しろよって出すのは間違いだよねってことじゃね?
969 :名無しさん@お腹いっぱい。:2011/12/05(月) 23:47:13.01 なんちゃら_enableがYESじゃなかったら警告を出してるのは/etc/rc.subrで、 sendmailの場合はsendmail_enableそのものじゃなくて>>957の変数で制御してるんだけど rc.subrはそこまで考慮してなくて警告出しちゃう。 defaults/rc.confではsendmail_enableはNOだけどsendmail_submit_enable, sendmail_outbound_enable, sendmail_msp_queue_enableはYESになっていて、 rc.d/sendmail はこの3つを見てるから、rc.confにsendmailに関して何も書いていない 場合は警告が出つつもstartでsendmailが上がるというからくり。 間違ってたら適当に補足してください。