我目前运行的服务因为一个错误而一直崩溃。 该错误已知并将在稍后修复,但我不能在每次崩溃时重新启动该服务。
Normaly将使用" service icinga2 restart"重新启动服务。 所以我在
创建了一个文件/etc/systemd/system/multi-user.target.wants/icinga.service
内容为:
[Unit]
Description=Icinga2 restart
[Service]
Type=simple
ExecStart=/etc/init.d/icinga2 restart
Restart=always
RestartSec=0
但它没有工作。我做错了什么?
答案 0 :(得分:0)
单位文件应该有配置指令指定单位的行为,而Icinga2服务确实需要一个后端,所以根据你的后端mysql
或postgresql
,你应该在那些之后启动它可用作开始行为,因此[Unit]
部分应该
After=syslog.target network.target postgresql.service mariadb.service
在服务部分Type
下应该分叉。
分叉是针对从ExecStart开始的进程生成的子进程,它成为服务的主要进程。启动完成后,父进程退出。
ExecStart
应指向/usr/sbin/icinga2 daemon -d
您还应为此提供PIDFile
位置。
这是我的文件副本:
[Unit]
Description=Icinga host/service/network monitoring system
After=syslog.target network.target postgresql.service mariadb.service carbon-cache.service
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/icinga2
ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/sysconfig/icinga2
ExecStart=/usr/sbin/icinga2 daemon -d -e ${ICINGA2_ERROR_LOG}
PIDFile=/run/icinga2/icinga2.pid
ExecReload=/usr/lib/icinga2/safe-reload /etc/sysconfig/icinga2
[Install]
WantedBy=multi-user.target
EnvironmentFile
看起来像:
DAEMON=/usr/sbin/icinga2
ICINGA2_CONFIG_FILE=/etc/icinga2/icinga2.conf
ICINGA2_RUN_DIR=/run
ICINGA2_STATE_DIR=/var
ICINGA2_PID_FILE=$ICINGA2_RUN_DIR/icinga2/icinga2.pid
ICINGA2_ERROR_LOG=/var/log/icinga2/error.log
ICINGA2_STARTUP_LOG=/var/log/icinga2/startup.log
ICINGA2_LOG=/var/log/icinga2/icinga2.log
ICINGA2_USER=icinga
ICINGA2_GROUP=icinga
ICINGA2_COMMAND_GROUP=icingacmd