我已经在这个网站上潜水很久了,但这是我的第一个问题。所以如果我的帖子有任何问题,请告诉我。
我们的 Ubuntu 服务器群中的两台服务器(超过 25 台机器)需要很长时间(超过 10 分钟)才能重新启动 syslog-ng 服务。所有机器都使用相同版本的 syslog-ng(3.5.3)。在对服务进行 strace 后,以下系统调用是进程挂起的地方(添加了前后几行以方便查看):
轮询([{fd=4,事件=POLLIN},{fd=3,事件=POLLIN}],2,4294967295)= 1([{fd=3,revents=POLLIN|POLLHUP}])<0.000248>
recvfrom(3, “”, 8, MSG_WAITALL, NULL, NULL) = 0 <0.000005>
poll([{fd=4, events=POLLIN}], 1, 4294967295 * 启动系统日志记录 syslog-ng [ OK ]) = ? ERESTART_RESTARTBLOCK (被信号中断) <841.792219>
--- SIGCHLD {si_signo=SIGCHLD,si_code=CLD_EXITED,si_pid=24591,si_status=0,si_utime=0,si_stime=0} --- 写入(5,“\21”,1)= 1 <0.000008>
rt_sigreturn() = -1 EINTR(中断系统调用)<0.000005>
轮询([{fd=4,事件=POLLIN}],1,4294967295)= 1([{fd=4,事件=POLLIN}])<0.000008>
这是简单的“sudo service syslog-ng restart”的结果,没有其他标志或选项。不确定是什么信号中断了 poll()。所有其他机器都在几秒钟内重新启动了该服务。
我不知道这是 syslog-ng 的问题,还是这些机器的配置出了问题。我经常用 Google 搜索,但一无所获。有人能告诉我如何解决此问题吗?
提前致谢!
答案1
不幸的是,我无法帮助追踪您的原始问题(可能是 AppArmor 问题?猜测一下……)。但我遇到了一个不同但相关的问题系统日志工具过去 - 它常常在夜间随机崩溃,原因很难解决。
最初,Ubuntu 的软件包包含经典的,系统安全类型的 init 脚本,无法重新启动崩溃的服务。我编写并成功使用了一个本地 Upstart 工作为此。由于它完全改变了守护进程的启动方式,因此很有可能这将解决您的问题,并增加崩溃时自动重启的额外功能。
如果要使用此功能,请完全停止该服务(确保它不独立运行并使用kill -s TERM ...
),保存作业文件到/etc/init/syslog-ng.conf, 制作/etc/init.d/syslog-ng符号链接至/lib/init/upstart 作业.然后sudo initctl reload-configuration
,最后service syslog-ng start
。
我认为,只是缺乏“人力”阻碍了 Ubuntu 为几乎所有服务包含适当的 Upstart 工作。