我有一个 Ubuntu 10.04 LTS 盒子,设置为 Chef 服务器。一切运行正常,直到第一次重新启动盒子,之后发生了以下三件(可能不相关的)事情:
- chef-client 尝试通过 apt 安装更新,但失败了
- Chef WebUI 停止工作(连接被拒绝/超时)
- CouchDB 及其依赖的 xulrunner 库停止响应命令 - 正在运行
service couchdb stop/start/status
或xulrunner -v
只是挂起 - 没有任何输出或添加到任何日志中
我认为更新问题是由这个错误引起的:https://bugs.launchpad.net/ubuntu/+source/xulrunner-1.9.2/+bug/680570,其中更新 xulrunner 会导致挂起。我能够通过从较早的备份(我们将其称为备份 A)恢复盒子、停止所有 chef 进程和 couchdb、安装 xulrunner-dev;安装所有剩余更新,然后重新启动一切来解决这个问题。此时 Chef 和 Couch 似乎都运行良好。我备份了处于这种“工作”状态的盒子,我们将其称为备份 B。
然而,尽管该盒子似乎在工作,但尝试通过 service couchdb 运行 status/restart/stop 再次导致挂起 - 没有输出。当我重新启动盒子时,CouchDB 没有启动,再次service couchdb start
挂起。然后我从备份 B 恢复了盒子,但当它启动时,CouchDB 没有启动 - 同样的问题是。如果我手动运行命令,couchdb 日志文件或输出中不会添加任何内容。
就目前情况而言,我有:
- CouchDB:0.10.0-1ubuntu2
- xulrunner:1.9.2.24+build2+nobinonly-0ubuntu0.10.04.1
如果我运行strace /usr/bin/couchdb
最后几行输出是:
stat("/var/lib/couchdb", {st_mode=S_IFDIR|0770, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0770, st_size=4096, ...}) = 0
open("/usr/bin/couchdb", O_RDONLY) = 3
fcntl(3, F_DUPFD, 10) = 10
close(3) = 0
fcntl(10, F_SETFD, FD_CLOEXEC) = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x408189, ~[RTMIN RT_1], SA_RESTORER, 0x7f2a7ba7caf0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f2a7ba7caf0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f2a7ba7caf0}, NULL, 8) = 0
read(10, "#! /bin/sh -e\n\n# Licensed under "..., 8192) = 8192
pipe([3, 4]) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2a7c2069d0) = 1463
close(4) = 0
read(3,
...然后它就挂了。
如果我运行strace xulrunner --gre-version
最后几行输出是:
open("/proc/cpuinfo", O_RDONLY) = 3
mmap(NULL, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feeee879000
open("/etc/ld.so.cache", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=33168, ...}) = 0
mmap(NULL, 33168, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7feeee84b000
munmap(0x7feeee84b000, 33168) = 0
close(4) = 0
futex(0x7feeec0760ec, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7feeeea980a0, FUTEX_WAIT_PRIVATE, 2, NULL
...然后它就挂了。
我也尝试过:
- 按照此处所述设置 ldconfig 文件:http://wiki.apache.org/couchdb/Installing_on_Ubuntu
- 添加 backports repos 并尝试安装更高版本的 CouchDB(由于更新过程尝试重新启动 CouchDB,因此失败,导致其挂起)
- 从备份 A 恢复,通过对软件包进行“保留”来阻止 xulrunner 更新
- 通过 apt 重新安装 xulrunner(由于重新安装过程挂起而失败)
- 更改沙发配置文件以将日志级别提高到“调试” - 仍然没有输出
- 确保所有沙发目录的所有权限和所有权均已适当设置
任何帮助均感激不尽。
答案1
几个月前,我遇到了一个奇怪的 chef-server 问题,通过检查 /var/log/chef 和 /var/run/chef 或类似内容的权限,以确保各种 chef 进程确实可以在这些目录中写入,我解决了这个问题。服务启动时似乎挂起了几分钟,然后一切都悄无声息地失败了。
答案2
我最终发现是该系统上的另一个软件包与 xulrunner 发生了冲突。重建该机器并去掉冲突的软件包后问题就解决了。