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.
epic – works perfectly for wowza, thanks for sharing – use the following:
cmd.append(‘java -server -Xmx4000M -Xms4000M -Xmn2000M -Djava.net.preferIPv4Stack=true -XX:+UseParallelGC -XX:ParallelGCThreads=20 -Dcom.sun.management.jmxremote=true -Dcom.wowza.wms.runmode=service -Dcom.wowza.wms.native.base=linux -Dcom.wowza.wms.AppHome=/usr/local/WowzaMediaServer -Dcom.wowza.wms.ConfigURL= -Dcom.wowza.wms.ConfigHome=/usr/local/WowzaMediaServer -cp /usr/local/WowzaMediaServer/bin/wms-bootstrap.jar com.wowza.wms.bootstrap.Bootstrap start’)