web-dev-qa-db-ja.com

いくつかのデーモンを起動している間ハングします

Debian SqueezeAMD64サーバーを実行しています。起動後のターゲットランレベルはランレベル2で、rsyslogd、cron、sshdなどが含まれますが、dovecot、postfix、Apache2などは含まれません。システムはいくつかの症状でランレベル2に到達できません。

  • Rsyslogdを起動しようとするとシステムがハングする
  • ランレベル1での起動が機能し、コンソールからのログインが機能します
  • /etc/init.d/rsyslogを介してランレベル1からrsyslogdを開始するとハングします
  • Rsyslogdを無効にしてランレベル2を開始すると機能します
  • しかし、その後、コンソール経由でのログインは失敗します:motdを取得し、その後何も取得しません
  • ランレベル1からのsshdの開始は成功します
  • しかし、その後、ssh経由でログインできません。時々パスワードsshログインは私にmotdを与え、それから何も与えない、時にはこれさえも与えない。公開鍵を提供しようとすると、sshdが煩わしくなり、それ以上話せなくなるようです。
  • ランレベル1から再起動すると、サーバーはApache2を停止しようとしてハングします(実行されていないため、これは非常に簡単です)。 runleve 1にログインしているときにApache2を停止しようとすると、同様にハングします。

そして、それは常に失敗するものです。 RAMはテスト済みですが、dmesgは問題を示していません。手がかりはありません。

更新 :(短縮)ランレベル1で呼び出されたrsyslogd -c4-dからの出力

rsyslogd 4.6.4起動、互換モード4、モジュールパス ''呼び出し元がオブジェクト 'net'を要求しましたが、見つかりません(iRet -3003)モジュール 'lmnet'をロードするように要求されましたモジュール '/user/lib/rsyslog/lmnet.so'モジュールをロードしますロードされているタイプ2のconf.cが「lmnet」の参照を要求しました。refcount1rsylogランタイムが初期化されました。バージョン4.6.4、現在のユーザー1syslogd.cが「lmnet」の参照を要求しました。refcountnow2

その後、Strg + Cでrsyslogdを強制終了できます。ただし、/ var/logには、構成されたログファイルは表示されません。

pdate2:@ DerfKのおかげで、まだ手がかりがありませんが、少なくとも問題を絞り込みました。私は現在、/etc/init.d/Apache2 stop(もちろん、Apache2を実行せずに)でテストしていますが、これもハングし、さらに明らかな失敗のように見えます。

いくつかのテストの結果、1行のファイルであることがわかりました。

/ usr/sbin/Apache2ctl configtest>/dev/null 2>&1

インタラクティブシェルで実行された同じ行が機能している間、ハングします。私はこの線をさらに減らすことができませんでした。 e。ハングを再現するには、すべてのパーツ、ストリームリダイレクト、およびコマンド自体が必要です。 @DerfKはまた、私にstraceを指摘しました。これは、ここにどのようなハングがあるかについての浅いヒントを与えました。

  • wait4(-1initスクリプト用
  • futex(0xsomepointer, FUTEX_WAIT_PRIVATE, 2, NULL for rsyslogd/Apache2バイナリはinitスクリプトによって呼び出されます

システムは2011年の秋に私のホスティング業者によってDebianLennyとしてインストールされました。私はすぐにシステムをSqueezeにアップグレードし、Squeezeで最新の状態に保ちました。しかし、大きな変化はありませんでした。私は以前にシステムを再起動しようとしたことがないと思います。

pdate:問題が見つかりました。私の/etc/nsswitch.confは、ホストルックアップバックアップとしてldapを指定しましたが、これは起動時に使用できません。 DNSに依存すると、起動の問題が修正されるだけです。

3
Adrian Heine

これは、いくつかの基本的なネットワークサービスが開始されていないように私には聞こえます。 /etc/rc2.dの内容を/etc/rc3.d roと比較して、ランレベル3がランレベル2が開始しないものを開始するかどうかを確認します(通常は開始しますが、通常は基本的なものではありません)。

1
geekosaur

DebianSqueezeはデフォルトで同時起動を行います。これは、起動時に複数のinitスクリプトが同時に実行されていることを意味します。これを無効にして、一度に1つのスクリプトのみが実行されるようにして、失敗しているステップを正確に見つけることができます。 initスクリプトは毎回同じ順序で実行されるため、もっと深刻な問題でない限り、毎回同じ順序で失敗するはずです。

同時起動を無効にするには、CONCURRENCY=none/etc/default/rcSに追加します。行を削除してデフォルトに戻します。

0
Arrowmaster