Монит говорит, что метод запуска не определен, несмотря на его
Я настроил monit, чтобы проверить, что мой IRCd и их службы работают. Недавно экземпляр, который запускает все это, перезапускается, и он не выполняет свою работу.
Он был настроен для запуска при загрузке.
[root@ip-172-31-21-162 ec2-user]# chkconfig --list monit
monit 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Контрольный файл
[root@ip-172-31-21-162 ec2-user]# cat /etc/monit.conf
set httpd port 2812
allow 127.0.0.1
set daemon 60
include /etc/monit.d/*
check process ircd with pidfile /home/ec2-user/inspircd/run/pid
start program = "/usr/bin/perl /home/ec2-user/inspircd/run/inspircd start"
as uid "ec2-user" and gid "ec2-user"
with timeout 30 seconds
check process services with pidfile /home/ec2-user/anope/run/data/services.pid
depends on ircd
start program = "/bin/sh /home/ec2-user/anope/run/bin/anoperc start"
as uid "ec2-user" and gid "ec2-user"
with timeout 30 seconds
Синтаксис этого выглядит хорошо в соответствии с документацией...
<START | STOP | RESTART> [PROGRAM] = "program"
[[AS] UID <number | string>]
[[AS] GID <number | string>]
[[WITH] TIMEOUT <number> SECOND(S)]
И проверка делает то же самое
[ec2-user@ip-172-31-29-142 ~]$ sudo monit -t
Control file syntax OK
Журналы показывают, что методы запуска не определены для этих отслеживаемых процессов!
[UTC May 14 04:39:51] error : 'ircd' process is not running
[UTC May 14 04:39:51] error : monit: Start or stop method not defined -- process ircd
[UTC May 14 04:39:51] error : 'services' process is not running
[UTC May 14 04:39:51] error : monit: Start or stop method not defined -- process services
По какой-то причине запуск процессов вручную через monit работает
[root@ip-172-31-21-162 ec2-user]# monit start ircd
[root@ip-172-31-21-162 ec2-user]# monit status
The Monit daemon 5.2.5 uptime: 7h 14m
Process 'ircd'
status running
monitoring status monitored
pid 26483
parent pid 1
uptime 3m
...
data collected Sat May 14 02:49:57 2016
Process 'services'
status running
monitoring status monitored
pid 26488
parent pid 1
uptime 3m
...
data collected Sat May 14 02:49:57 2016
Что довольно странно. Когда я останавливаю эти проверенные процессы и перезапускаю monit с включенным ведением журнала отладки, я вижу, что он сообщает о запуске программ.
Process Name = ircd
Pid file = /home/ec2-user/inspircd/run/pid
Monitoring mode = active
Start program = '/home/ec2-user/inspircd/run/inspircd start' as uid 500 as gid 500 timeout 30 second(s)
Existence = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
Pid = if changed 1 times within 1 cycle(s) then alert
Ppid = if changed 1 times within 1 cycle(s) then alert
Process Name = services
Pid file = /home/ec2-user/anope/run/data/services.pid
Monitoring mode = active
Start program = '/home/ec2-user/anope/run/bin/anoperc start' as uid 500 as gid 500 timeout 30 second(s)
Existence = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
Depends on Service = ircd
Pid = if changed 1 times within 1 cycle(s) then alert
Ppid = if changed 1 times within 1 cycle(s) then alert
Есть идеи, что от имени Глоба происходит здесь?
1 ответ
Согласно документированному поведению monit, метод stop также должен быть определен для правильного запуска не запущенных процессов.
В активном режиме (по умолчанию) Monit будет активно контролировать службу и в случае возникновения проблем поднимать оповещения и / или перезапускать службу.
- Monit Docs; методы обслуживания
Действие, которое выполняется Monit, когда процесс не запущен, всегда было "перезапустить", но поскольку не было отдельной "программы перезапуска" (до Monit 5.7), использовалась последовательность stop+start.
- Мониторинг вопросов; перезапуск вместо запуска, когда процесс не запущен
Таким образом, решение заключается в том, чтобы добавить stop program
строка проверенных процессов в контрольном файле. Очевидно, что если вы работаете с версией>=5.7, вы можете использовать restart program