Apache2

為什麼monit停止apache重新啟動,停止,優雅

  • December 2, 2017

執行一段時間後,我無法重新啟動或停止 apache,它說存在衝突,使用埠 80 的其他東西。Apache 仍然可以正常服務網頁,當我 netstat -anp | grep 80 我仍然只看到 apache 在聽:80。

當我開始監視時,我收到 apache 的“未監視”錯誤。我不確定這是否與問題有關,我目前正在嘗試解決此問題。

監控詳情如下:

set httpd port 2812 and
#use address localhost  # only accept connection from localhost
allow 0.0.0.0/0.0.0.0        # allow localhost to connect to the server   and
allow *******:******      # require user '' with password ....
allow @monit           # allow users of group 'monit' to connect (rw)
allow @users readonly  # allow users of group 'users' to connect readonly

##monitor apache
check process apache with pidfile /var/run/httpd/httpd.pid
group apache
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout

monit -vv 的輸出

monit: Debug: Adding net allow '0.0.0.0/0.0.0.0'.
monit: Debug: Adding credentials for user '******'.
monit: Adding PAM group 'monit'.
monit: Adding PAM group 'users'.
Runtime constants:
Control file       = /etc/monit.conf
Log file           = /var/log/monit
Pid file           = /var/run/monit.pid
Debug              = True
Log                = True
Use syslog         = False
Is Daemon          = True
Use process engine = True
Poll time          = 60 seconds with start delay 0 seconds
Expect buffer      = 256 bytes
Mail server(s)     = smtp.sendgrid.net:587(ssl) with timeout 30 seconds
Mail from          = ******
Mail subject       = monit alert --  $EVENT $SERVICE
Mail message       = $EVENT Service $SERV..(truncated)
Start monit httpd  = True
httpd bind address = Any/All
httpd portnumber   = 2812
httpd signature    = True
Use ssl encryption = False
httpd auth. style  = Basic Authentication and Host/Net allow list
Alert mail to      = *******
  Alert on         = All events

The service list contains the following entries:

Process Name          = apache
Group                = apache
Pid file             = /var/run/httpd/httpd.pid
Monitoring mode      = active
Start program        = '/etc/init.d/httpd start' timeout 30 second(s)
Stop program         = '/etc/init.d/httpd stop' 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
Port                 = if failed 127.0.0.1:80 [HTTP via TCP] with timeout 5 seconds 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
Timeout              = If restarted 5 times within 5 cycle(s) then unmonitor

Process Name          = mysqld
Group                = mysql
Pid file             = /var/run/mysqld/mysqld.pid
Monitoring mode      = active
Start program        = '/etc/init.d/mysqld start' timeout 30 second(s)
Stop program         = '/etc/init.d/mysqld stop' 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
Port                 = if failed 127.0.0.1:3306 [DEFAULT via TCP] with timeout 5 seconds 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
Timeout              = If restarted 5 times within 5 cycle(s) then unmonitor

System Name           = system_ip-10-74-144-130.eu-west-1.compute.internal
Monitoring mode      = active

無法連接的問題可能是因為重新啟動過程沒有正確殺死 httpd,因此它實際上從未關閉,這就是為什麼您會收到有關埠 80 正在使用的錯誤。我還懷疑 Pid 可能會發生變化,就像 httpd 啟動或重新啟動時一樣。日誌應提供有關失敗原因的更多資訊。

但是,httpd 作為守護程序通常是可靠的,我不會強制 monit 重新啟動它,除非您處於關鍵狀態,否則只會發出警報。

引用自:https://serverfault.com/questions/886268