Apache2
為什麼monit停止apache重新啟動,停止,優雅
執行一段時間後,我無法重新啟動或停止 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 重新啟動它,除非您處於關鍵狀態,否則只會發出警報。