我试图用Monit监视我的FPM守护进程,我假设由于重生和PID改变,以下不是最好的技术?
check process php5-fpm with pidfile "/var/run/php5-fpm.pid"
start = "/etc/init.d/php5-fpm start"
stop = "/etc/init.d/php5-fpm stop"
if failed port 80 protocol http then restart
Run Code Online (Sandbox Code Playgroud)
从我可以收集的内容来看,更好的方法是使用FPM ping URL,但我无法使用Apache激活它们.
除了设置FPM池选项之外,Apache/PHP-FPM中究竟需要做什么:
pm.status_path =/status ping.path =/ping
我希望能让我简单地去:
拉起状态页面.当我转到此URL时,我收到404错误.我假设我需要某种处理程序来重定向/ status和/ ping到我的本地主机端口9000上的FPM服务器.我该怎么做?
我在我的ec2实例上使用monit而且我是nginx的新手.下面是我的nginx配置文件:
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass 127.0.0.1:2812;
proxy_set_header Host $host;
}
}
Run Code Online (Sandbox Code Playgroud)
所以..如果我去domain.com,我看到monit.如何修改上面的代码,我可以在domain.com/monit上看到monit?
谢谢
我有一个应用程序在我的本地机器上完美运行,现在正在部署它.我有VPS全部设置,它也非常有效.我的问题来自无法启动delayed_job.我做了"ruby脚本/ delayed_job启动RAILS_ENV =生产",同时SSHd到应用程序,它返回"delayed_job:进程与pid 11547开始." 当我在htop中查找过程时,我找不到它.
所以我挖了一遍,读到Monit可以保持delayed_job继续.我把它设置了,希望我能以这种方式启动delayed_job.但是没有delayed_job.pid,所以我没有走得太远.我最终在其中设置了nginx和mysql,并且想完成设置delayed_job.缺少delayed_job.pid会妨碍.
当我通过SSH连接到应用程序并运行"rake jobs:work RAILS_ENV = production"时,一切正常.所以我很确定应用程序本身很好.
我正在使用collectiveidea的delayed_job.谢谢你的帮助.
我试图使用monit运行delayed_job,但它无法作为rvm的路径运行(每个用户的本地rvm安装)不可用于该命令.我的应用程序是带有bundler的rails2应用程序.Monit无法找到捆绑包.有没有人有任何建议,我怎么能告诉monv的rvm路径?
我收到了错误
[rails@x-rws1 current]$ monit start delayed_job -c config/delayed_job.monitrc
'delayed_job' start: /usr/bin/env
'delayed_job' failed to start
no such file to load -- bundler
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/home/rails/public_html/myapp/current/config/../config/preinitializer.rb:3
/home/rails/public_html/myapp/current/config/boot.rb:28:in `load'
/home/rails/public_html/myapp/current/config/boot.rb:28:in `preinitialize'
/home/rails/public_html/myapp/current/config/boot.rb:10:in `boot!'
/home/rails/public_html/myapp/current/config/boot.rb:123
/home/rails/public_html/myapp/current/config/environment.rb:12:in `require'
/home/rails/public_html/myapp/current/config/environment.rb:12
/home/rails/public_html/myapp/current/script/delayed_job:3:in `require'
/home/rails/public_html/myapp/current/script/delayed_job:3
Run Code Online (Sandbox Code Playgroud)
我的config/delayed_job.monitrc
set daemon 120
check process delayed_job with pidfile /home/rails/public_html/myapp/shared/pids/delayed_job.pid
start program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job start"
stop program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job stop"
Run Code Online (Sandbox Code Playgroud)
和script/delayed_job可执行文件
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize
Run Code Online (Sandbox Code Playgroud) 我有一个用Ruby编写的特定脚本需要root权限.大多数其他流程不需要,因此在Monit中很容易设置.不是这个.
服务器需要在386处侦听,此端口仅适用于root.我不会详细说明为什么,因为1)我不是一个低级别的人,2)到目前为止使用sudo时工作正常.
monit配置文件很简单,如下所示:
set logfile syslog facility LOG_daemon # Default facility is LOG_USER
set mailserver smtp.sendgrid.net
username "blah", password "blah"
with timeout 20 seconds
set alert blah@bleh.com
set logfile /home/deploy/monit.log
check process ldapserver
with pidfile /var/pids/ldap_server.pid
start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
stop program = "/bin/sh"
Run Code Online (Sandbox Code Playgroud)
注意:我已将/ bin/sh放入停止程序中,因为此过程没有停止程序.
如果我这样说:
start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb"
Run Code Online (Sandbox Code Playgroud)
它无法启动.没有提示.
start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb
Run Code Online (Sandbox Code Playgroud)
也失败了.没有输出.
start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb'
Run Code Online (Sandbox Code Playgroud)
无法启动.
我也尝试使用> ~/out.log 2 > &1捕获stderr和stdout来重定向输出,但它似乎不起作用.
现在,我在部署用户下开始监控,这是受限制的.所以,我需要以某种方式以root身份运行ldap服务器,但事实证明这很难做到. …
我编写了一个可以正常启动和停止服务器的脚本.
#!/bin/bash
PID_FILE='/var/run/rserve.pid'
start() {
touch $PID_FILE
eval "/usr/bin/R CMD Rserve"
PID=$(ps aux | grep Rserve | grep -v grep | awk '{print $2}')
echo "Starting Rserve with PID $PID"
echo $PID > $PID_FILE
}
stop () {
pkill Rserve
rm $PID_FILE
echo "Stopping Rserve"
}
case $1 in
start)
start
;;
stop)
stop
;;
*)
echo "usage: rserve {start|stop}" ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
如果我通过运行启动它
rserve start
Run Code Online (Sandbox Code Playgroud)
然后启动monit它将正确捕获PID和服务器:
The Monit daemon 5.3.2 uptime: 0m
Remote Host 'localhost'
status …Run Code Online (Sandbox Code Playgroud) 我正在使用Monit来监控系统.我有一个我想要监视的python文件,我知道我需要创建一个包装脚本,因为python不会生成pid文件.我按照本网站上的说明操作,但是我无法启动脚本.我之前从未创建过包装器脚本,所以我认为我的脚本中有错误.来自monit的日志说"启动失败"
Monit规则
check process scraper with pidfile /var/run/scraper.pid
start = "/bin/scraper start"
stop = "/bin/scraper stop"
Run Code Online (Sandbox Code Playgroud)
包装脚本
#!/bin/bash
PIDFILE=/var/run/scraper.pid
case $1 in
start)
echo $$ > ${PIDFILE};
source /home
exec python /home/scraper.py 2>/dev/null
;;
stop)
kill `cat ${PIDFILE}` ;;
*)
echo "usage: scraper {start|stop}" ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud) 我在使用monit监控程序时遇到问题.
我在覆盆子pi上运行它,从源代码构建了monit 5.11; 我尝试使用存储库中的版本,但它是5.4并且不支持我想要的一些语法.
我试图遵循"问:我有一个程序不会创建自己的pid文件.由于monit要求所有程序都有一个pid文件,我该怎么办?" 在FAQ中输入.
这是我的start_sensors.sh脚本(它只运行我的python程序,而不是wiki示例中的java程序):
#!/bin/bash
case $1 in
start)
echo $$ > /var/run/start_sensors.pid;
exec 2>&1 /usr/bin/python /home/pi/temperature/post_temps.py 1>/tmp/post_temps.out
;;
stop)
kill `cat /var/run/start_sensors.pid` ;;
*)
echo "usage: start_sensors {start|stop}" ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
这是我的/etc/monit/monitrc条目:
# Run temperature sensor monitor
check process start_sensors.sh with pidfile /var/run/start_sensors.pid
start = "/home/pi/temperature/start_sensors.sh start"
stop = "/home/pi/temperature/start_sensors.sh stop"
Run Code Online (Sandbox Code Playgroud)
监视日志中的输出如下所示:
[EST Jan 24 14:21:16] info : 'raspberrypi' Monit reloaded
[EST Jan 24 14:21:16] error : 'start_sensors.sh' process is not running …Run Code Online (Sandbox Code Playgroud) 我使用 monit 来监控服务的状态,当服务关闭时,我想以相同的格式向多个收件人发送警报电子邮件。这是我的 monit 配置的一部分:
set mail-format { from: no-reply@gmail.com }
check host hostA with address hostA
alert userA@gmail.com
MAIL-FORMAT { # use local format
subject: redis is down on hostA
message: redis is down on hostA on port 6379
Yours sincerely,
monit
}
alert userB@gmail.com
MAIL-FORMAT { # use local format
subject: redis is down on hostA
message: redis is down on hostA on port 6379
Yours sincerely,
monit
}
if failed port 6379 retry 3 then exec "/monit/scripts/myscripts.sh" …Run Code Online (Sandbox Code Playgroud) 我在我的ec2 linux实例上通过屏幕运行我的app.js(节点js应用程序).我正在尝试配置我的monitrc文件,我需要app pidfile.它不在:/ var/run(并且没有/ var/www)
如果有人知道pidfile在哪里或者我怎么能找到它,真的很感激..
谢谢!
monit ×10
bash ×2
delayed-job ×2
linux ×2
apache ×1
gnu-screen ×1
nginx ×1
node.js ×1
php ×1
pid ×1
privileges ×1
rvm ×1
su ×1
sudo ×1