1

我已将 xinetd 配置为在端口 5667 上建立连接时启动 NSCA。我可以通过命令行以 root 身份启动 xinetd 并且一切正常:

/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid

我可以向自己发送一条测试 NSCA 消息,并且 /var/log/messages 显示 NSCA 守护进程正在启动、写入 nagios.cmd 管道等。

但是,当由 运行时systemctl start xinetd,我的测试消息失败,并显示“在收到初始化数据包之前服务器已关闭连接”ps -ef | grep xinetd无论以哪种方式运行,xinetd 服务看起来都是一样的。我不认为它是用户或权限问题,因为它应该以 root 身份运行。

没有太多运气让 NSCA 或 XINETD 记录任何相关信息,说明为什么它试图启动 NSCA 守护程序但立即退出......

请参阅下面的有关 xinetd 的 nsca 文件

service nsca
{
flags = REUSE
socket_type = stream
wait = no
user = root
group = root
server = /usr/sbin/nsca
server_args = -c /usr/local/nagios/etc/nsca.cfg --inetd
log_on_failure += USERID
disable = no
only_from = <list of allowed hosts>
instances = UNLIMITED
per_source = UNLIMITED
cps = 5000 0
}
4

1 回答 1

1

解决方案:我了解到,当 systemd 启动一个进程时,它处于一个全新的环境中。因此,xinetd 运行的任何需要环境变量的东西都需要那些在 xinetd 的环境文件中传递的环境变量(/lib/systemd/system/xinetd.service 中称为“EnvironmentFile”的字段)。对于我住在:/etc/sysconfig/xinetd 为了找到我需要的变量,在手动运行 xinetd 的 bash 窗口中,'env' 吐出所有变量。将它们全部复制到/etc/sysconfig/xinetd 中,然后'systemctl restart xinetd' 一切正常。然后通过消除过程确定我缺少的环境变量是:LD_LIBRARY_PATH=:/usr/local/libmcrypt/lib

于 2020-12-03T21:11:34.007 回答