启动多个守护进程时挂起

启动多个守护进程时挂起

我正在运行 Debian Squeeze AMD64 服务器。启动后的目标运行级别是运行级别 2,其中包括 rsyslogd、cron、sshd 和其他一些内容,但不包括 dovecot、postfix、apache2 等。系统无法达到运行级别 2,并出现以下几种症状:

  • 系统在尝试启动 rsyslogd 时挂起
  • 启动到运行级别 1 即可,然后从控制台登录即可
  • 通过 /etc/init.d/rsyslog 从运行级别 1 启动 rsyslogd 挂起
  • 在禁用 rsyslogd 的情况下启动运行级别 2 有效
  • 但是,通过控制台登录失败:我得到了 mod,然后什么也没有
  • 从运行级别 1 启动 sshd 成功
  • 但是,我无法通过 ssh 登录。有时密码 ssh 登录会给我 motd,然后什么都没有,有时甚至没有这个。尝试提供公钥似乎让 sshd 很恼火,以至于不再与我对话。
  • 从运行级别 1 重新启动时,服务器在尝试停止 apache2(未运行,因此这实际上应该很简单)时挂起。在运行级别 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'的引用,引用计数 1 rsylog 运行时已初始化,版本 4.6.4,当前用户 1 syslogd.c 请求'lmnet'的引用,引用计数现在为 2

然后,我可以使用 Strg+C 杀死 rsyslogd。但是,/var/log 没有显示任何配置的日志文件。

更新2:感谢@DerfK,我仍然一无所知,但至少我缩小了问题的范围。我现在正在测试/etc/init.d/apache2 stop(当然,没有运行 apache2),它也挂了,看起来是一个更明显的故障。

经过一些测试后,我发现一个文件只有一行:

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

挂起,而在交互式 shell 中执行的同一行则有效。我无法进一步减少这一行,即每个部分、流重定向和 commando 本身是必要的重现挂起。@DerfK 还指出,strace这给了我一个关于我们这里遇到的是哪种挂起的浅显提示:

  • wait4(-1对于 init 脚本
  • futex(0xsomepointer, FUTEX_WAIT_PRIVATE, 2, NULL对于由 init 脚本调用的rsyslogd/二进制文件apache2

2011 年秋季,我的主机商将系统安装为 Debian Lenny,我立即将其升级到 Squeeze,并使其与 Squeeze 保持同步,当时 Squeeze 还在测试中。不过,没有什么大的变化。我想我以前从未尝试过重新启动系统。

更新3:我发现了问题。我的 /etc/nsswitch.conf 指定 ldap 作为主机查找备份,但在启动时不可用。仅依靠 dns 即可解决我的启动问题。

答案1

在我看来,这像是某些基本网络服务没有启动。将 的内容/etc/rc2.d/etc/rc3.dro 进行比较,看看运行级别 3 是否启动了运行级别 2 没有启动的任何东西(通常会启动,但通常不是基本的东西)。

答案2

Debian Squeeze 默认并发启动。这意味着在启动时多个 init 脚本会同时运行。您可以尝试禁用此功能,以便每次只运行一个脚本,以帮助准确找出失败的步骤。由于 init 脚本每次都会以相同的顺序运行,因此除非问题更加严重,否则每次失败的顺序都应是相同的。

要禁用并发启动,请添加CONCURRENCY=none/etc/default/rcS。删除该行可恢复默认设置。

相关内容