-
-
Save sudara/8653130 to your computer and use it in GitHub Desktop.
# this monit config goes in /etc/monit/conf.d | |
check process puma_master | |
with pidfile /data/myapp/current/tmp/puma.pid | |
start program = "/etc/monit/scripts/puma start" | |
stop program = "/etc/monit/scripts/puma stop" | |
group myapp | |
check process puma_worker_0 | |
with pidfile /data/myapp/current/tmp/puma_worker_0.pid | |
if totalmem is greater than 230 MB for 2 cycles then exec "/etc/monit/scripts/puma kill_worker 0" | |
check process puma_worker_1 | |
with pidfile /data/myapp/current/tmp/puma_worker_1.pid | |
if totalmem is greater than 230 MB for 2 cycles then exec "/etc/monit/scripts/puma kill_worker 1" | |
check process puma_worker_2 | |
with pidfile /data/myapp/current/tmp/puma_worker_2.pid | |
if totalmem is greater than 230 MB for 2 cycles then exec "/etc/monit/scripts/puma kill_worker 2" | |
check process puma_worker_3 | |
with pidfile /data/myapp/current/tmp/puma_worker_3.pid | |
if totalmem is greater than 230 MB for 2 cycles then exec "/etc/monit/scripts/puma kill_worker 3" |
# This goes in the app as config/puma.rb | |
environment 'production' | |
workers 4 | |
threads 1,4 | |
preload_app! | |
daemonize true | |
pidfile 'tmp/puma.pid' | |
stdout_redirect 'log/puma.log', 'log/puma.log', true | |
bind 'unix://tmp/puma.sock' | |
state_path 'tmp/puma.state' | |
on_worker_boot do |worker_index| | |
# write worker pid | |
File.open("tmp/puma_worker_#{worker_index}.pid", "w") { |f| f.puts Process.pid } | |
# reconnect to redis | |
Redis.current.client.reconnect | |
ActiveSupport.on_load(:active_record) do | |
ActiveRecord::Base.establish_connection | |
end | |
end |
#!/usr/bin/env bash | |
# This monit wrapper script will be called by monit as root | |
# Edit these variables to your liking | |
RAILS_ENV=production | |
USER=myapp | |
APP_DIR=/data/myapp/current | |
PUMA_CONFIG_FILE=$APP_DIR/config/puma.rb | |
PUMA_PID_FILE=$APP_DIR/tmp/puma.pid | |
PUMA_SOCKET=$APP_DIR/tmp/puma.sock | |
# check if puma process is running | |
puma_is_running() { | |
if [ -S $PUMA_SOCKET ] ; then | |
if [ -e $PUMA_PID_FILE ] ; then | |
if cat $PUMA_PID_FILE | xargs pgrep -P > /dev/null ; then | |
return 0 | |
else | |
echo "No puma process found" | |
fi | |
else | |
echo "No puma pid file found" | |
fi | |
else | |
echo "No puma socket found" | |
fi | |
return 1 | |
} | |
case "$1" in | |
start) | |
echo "Starting puma..." | |
rm -f $PUMA_SOCKET | |
if [ -e $PUMA_CONFIG_FILE ] ; then | |
echo "cd $APP_DIR && RAILS_ENV=$RAILS_ENV bundle exec puma -C $PUMA_CONFIG_FILE" | |
/bin/su - $USER -c "cd $APP_DIR && RAILS_ENV=$RAILS_ENV bundle exec puma -C $PUMA_CONFIG_FILE" | |
else | |
echo "No config file found" | |
/bin/su - $USER -c "cd $APP_DIR && RAILS_ENV=$RAILS_ENV bundle exec puma --daemon --bind unix://$PUMA_SOCKET --pidfile $PUMA_PID_FILE" | |
fi | |
echo "done" | |
;; | |
stop) | |
echo "Stopping puma..." | |
kill -s SIGTERM `cat $PUMA_PID_FILE` | |
rm -f $PUMA_PID_FILE | |
rm -f $PUMA_SOCKET | |
echo "done" | |
;; | |
restart) | |
if puma_is_running ; then | |
echo "Hot-restarting puma..." | |
kill -s SIGUSR2 `cat $PUMA_PID_FILE` | |
echo "Doublechecking the process restart..." | |
sleep 15 | |
if puma_is_running ; then | |
echo "done" | |
exit 0 | |
else | |
echo "Puma restart failed :/" | |
fi | |
fi | |
;; | |
phased_restart) | |
if puma_is_running ; then | |
echo "Phased-restarting puma..." | |
kill -s SIGUSR1 `cat $PUMA_PID_FILE` | |
echo "Doublechecking the process restart..." | |
sleep 10 | |
if puma_is_running ; then | |
echo "done" | |
exit 0 | |
else | |
echo "Puma restart failed :/" | |
fi | |
fi | |
;; | |
kill_worker*) | |
if [ -z "$2" ];then | |
logger -t "unicorn_${APP}" -s "kill_worker called with no worker identifier" | |
exit 1 | |
fi | |
PID_DIR=`dirname $PUMA_PID_FILE` | |
kill -s QUIT `cat ${PID_DIR}/puma_worker_$2.pid` | |
STATUS=$? | |
exit $STATUS | |
;; | |
*) | |
echo "Usage: puma {start|stop|restart|kill_worker 0,1,2,etc}" >&2 | |
;; | |
esac |
hi i user use config here is result :(
[alif@ozrailsserver sites-enabled]$ ps aux | grep puma
alif 6929 1.8 3.1 467584 32508 ? D 02:28 0:02 puma: cluster worker 1: 6506 [10]
alif 6932 1.9 3.2 467584 32892 ? D 02:28 0:02 puma: cluster worker 0: 6506 [10]
alif 6938 1.9 3.1 467584 32272 ? R 02:28 0:02 puma: cluster worker 0: 6506 [10]
alif 6941 1.9 3.1 467584 31924 ? R 02:28 0:02 puma: cluster worker 1: 6506 [10]
alif 6948 2.0 3.0 467716 31348 ? D 02:28 0:02 puma: cluster worker 1: 6506 [10]
alif 6951 2.0 3.0 467716 31192 ? D 02:28 0:02 puma: cluster worker 0: 6506 [10]
alif 6956 2.0 3.0 467716 31440 ? D 02:28 0:02 puma: cluster worker 0: 6506 [10]
alif 6959 2.1 3.0 467716 31392 ? D 02:28 0:02 puma: cluster worker 1: 6506 [10]
alif 6964 2.1 3.5 467716 35736 ? D 02:28 0:02 puma: cluster worker 1: 6506 [10]
alif 6966 2.1 3.5 467716 36136 ? D 02:28 0:02 puma: cluster worker 0: 6506 [10]
alif 6972 2.1 3.4 467716 35204 ? R 02:28 0:01 puma: cluster worker 0: 6506 [10]
alif 6975 2.1 3.5 467716 36224 ? D 02:28 0:01 puma: cluster worker 1: 6506 [10]
alif 6983 2.1 3.9 467716 40284 ? R 02:29 0:01 puma: cluster worker 0: 6506 [10]
alif 6986 2.2 3.9 467716 39676 ? D 02:29 0:01 puma: cluster worker 1: 6506 [10]
alif 6991 2.2 3.8 467716 39552 ? R 02:29 0:01 puma: cluster worker 0: 6506 [10]
alif 6994 2.3 4.0 467716 40888 ? R 02:29 0:01 puma: cluster worker 1: 6506 [10]
alif 7014 0.0 0.0 112904 920 pts/0 S+ 02:30 0:00 grep --color=auto puma
2016/07/06 02:17:26 [alert] 5241#5241: 1024 worker_connections are not enough
2016/07/06 02:17:26 [error] 5241#5241: *8601 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: 188.166.162.99, request: "GET / HTTP/1.0", upstream: "http://127.0.53.53:80/500.html", host: "188.166.162.99"
2016/07/06 02:20:53 [alert] 5242#5242: 1024 worker_connections are not enough
2016/07/06 02:20:53 [error] 5242#5242: *9755 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: 188.166.162.99, request: "GET / HTTP/1.0", upstream: "http://127.0.53.53:80/", host: "188.166.162.99"
2016/07/06 02:20:53 [alert] 5242#5242: 1024 worker_connections are not enough
2016/07/06 02:20:53 [error] 5242#5242: *9755 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: 188.166.162.99, request: "GET / HTTP/1.0", upstream: "http://127.0.53.53:80/500.html", host: "188.166.162.99"
2016/07/06 02:21:17 [alert] 5242#5242: 1024 worker_connections are not enough
2016/07/06 02:21:17 [error] 5242#5242: *10779 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: 188.166.162.99, request: "GET / HTTP/1.0", upstream: "http://127.0.53.53:80/", host: "188.166.162.99"
2016/07/06 02:21:17 [alert] 5242#5242: 1024 worker_connections are not enough
2016/07/06 02:21:17 [error] 5242#5242: *10779 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: 188.166.162.99, request: "GET / HTTP/1.0", upstream: "http://127.0.53.53:80/500.html", host: "188.166.162.99"
check process puma_master
with pidfile /data/myapp/current/tmp/puma.pid
start program = "/etc/monit/scripts/puma start"
stop program = "/etc/monit/scripts/puma stop"
group myapp
what's the meaning of group myapp
at the end of this script?
https://mmonit.com/monit/documentation/monit.html
SERVICE GROUPS
Service entries in the control file, monitrc, can be grouped together by the group statement. The syntax is simply (keyword in capital):
GROUP groupname
With this statement it is possible to group similar service entries together and manage them as a whole. Monit provides functions to start, stop, restart, monitor and unmonitor a group of services, like so:
To start a group of services from the console:
monit -g <groupname> start
To stop a group of services:
monit -g <groupname> stop
To restart a group of services:
monit -g <groupname> restart
A service can be added to multiple groups by using more than one group statement:
group www
group filesystem
Thanks man! ❤️