Monit говорит, что метод запуска не определен, несмотря на то, что это так

Я настроил 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

Есть идеи, что, во имя Глоба, здесь происходит?


person Erin Schoonover    schedule 14.05.2016    source источник


Ответы (1)


Согласно задокументированному поведению monit, метод остановки также должен быть определен для правильного запуска неработающих процессов.

В активном режиме (по умолчанию) Monit будет активно отслеживать службу и в случае возникновения проблем выдавать предупреждения и/или перезапускать службу.

-- Monit docs; методы обслуживания

Действие, выполняемое Monit, когда процесс не запущен, всегда был «перезапуск», но, поскольку не было отдельной «программы перезапуска» (до Monit 5.7), использовалась последовательность «стоп+запуск».

-- Мониторинг проблем; перезапустить вместо запуска, когда процесс не запущен

Поэтому решение есть и состояло в том, чтобы добавить строку stop program в проверяемые процессы в контрольном файле. Очевидно, если вы используете версию >= 5.7, вы также можете использовать restart program

person Erin Schoonover    schedule 14.05.2016