0

IRCd とそのサービスが実行されていることを確認するように monit を構成しました。最近、これらすべてを実行するインスタンスが再起動されましたが、機能しませんでした。

起動時に起動するように構成されました。

[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

グロブの名前でここで何が起こっているのか、何か考えはありますか?

4

1 に答える 1

0

文書化された monit の動作によると、実行されていないプロセスを適切に開始するには、停止メソッドも定義する必要があります。

アクティブ モード (デフォルト) では、Monit は積極的にサービスを監視し、問題が発生した場合はアラートを生成したり、サービスを再起動したりします。

--ドキュメントを監視します。サービス方法

プロセスが実行されていないときに Monit が実行するアクションは常に「再起動」でしたが、スタンドアロンの「再起動プログラム」が存在しなかったため (Monit 5.7 まで)、停止 + 起動シーケンスが使用されました。

--問題を監視します。プロセスが実行されていないときは、開始ではなく再起動します

したがって、解決策はstop program、制御ファイル内のチェックされたプロセスに行を追加することでした。明らかにバージョン>=5.7を実行している場合、代わりに使用できますrestart program

于 2016-05-14T05:36:13.630 に答える