我正在尝试使用supervisor来管理一个进程,但是该进程没有在前台运行的选项:它总是守护进程。(这是Zabbix服务器)。
有什么办法可以与主管一起管理守护程序?有什么工具可以使其在前台运行?或者,也许以某种方式使用pidfile?
我正在尝试使用supervisor来管理一个进程,但是该进程没有在前台运行的选项:它总是守护进程。(这是Zabbix服务器)。
有什么办法可以与主管一起管理守护程序?有什么工具可以使其在前台运行?或者,也许以某种方式使用pidfile?
Answers:
为了解决该问题,我们需要一些在前台运行的程序,该程序在守护程序退出时退出,并且还代理向守护程序的信号。
考虑使用以下脚本bash脚本:
#! /usr/bin/env bash
set -eu
pidfile="/var/run/your-daemon.pid"
command=/usr/sbin/your-daemon
# Proxy signals
function kill_app(){
kill $(cat $pidfile)
exit 0 # exit okay
}
trap "kill_app" SIGINT SIGTERM
# Launch daemon
$command
sleep 2
# Loop while the pidfile and the process exist
while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; do
sleep 0.5
done
exit 1000 # exit unexpected
以防万一有人像我一样使用搜索引擎解决这个问题。
自v3.0.0beta1起,Zabbix提供了“ -f”选项以在前台运行(https://support.zabbix.com/browse/ZBXNEXT-611)
如下所示,我们使用二进制的绝对路径(从源代码编译)开始该过程,使用“ -c”开关提供配置文件,并使用配置文件的绝对路径。然后,提及的“ -f”开关将在前台运行该进程。
我们使用的监督配置文件如下所示:
[program:zabbix-server]
command=/opt/application/zabbix-server/3.2.7/zabbix_server -c /opt/application/zabbix-server/3.2.7/zabbix-server.conf -f
startsecs=5
startretries=3
autostart=true
autorestart=true
user=zabbix
stdout_logfile=/data/application/zabbix-server/3.2.7/log/zabbix-server.log
stderr_logfile=/data/application/zabbix-server/3.2.7/log/zabbix-server-stderr.log
请注意,我们在zabbix-server.conf中配置
LogType=console
祝一切顺利