Running Supervisor with Java.
The problem when using Java inside a shell script, it doesn’t kill the Java process.
/etc/supervisor.conf ... [program:jserver] command=/home/mahjongpal/jserver-fb/jserver.py process_name=%(program_name)s directory=/home/mahjongpal/jserver-fb/ startsecs=10 stderr_logfile=/var/log/supervisor/jserver_err.log stdout_logfile=/var/log/supervisor/jserver_out.log autorestart=true stopsignal=KILL user=mahjongpal [program:policy] command=/home/mahjongpal/jserver-fb/policy.py process_name=%(program_name)s directory=/home/mahjongpal/jserver-fb/ startsecs=10 stderr_logfile=/var/log/supervisor/policy_err.log stdout_logfile=/var/log/supervisor/policy_out.log autorestart=true stopsignal=KILL
Here’s the borrowed code from http://lists.supervisord.org/pipermail/supervisor-users/2011-May/000904.html
Modified to work with a Java game engine:
/home/mahjongpal/jserver-fb/jserver.py
#!/usr/bin/env python
# Filename: jserver.py
# Desc: wrapper script to run via supervisor
#
import glob
import os
import sys
run_mode = os.getenv('RUN_MODE')
jvm_args = os.getenv('JVM_ARGS')
classpath = ':'.join(glob.glob('lib/*'))
cmd = []
cmd.append('java -Xms64m -Xmx512m -cp %s:. MessageRouter mahjong.cfg' % classpath)
if jvm_args:
cmd.append(jvm_args)
cmd.append(' '.join(sys.argv[1:]))
cmd = ' '.join(cmd).split()
cmd.insert(1, os.path.basename(sys.argv[0]))
os.execvp(cmd[0], cmd[1:])
Now Supervisor can start and stop with all Java programs killed.