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.