Author: Category: Posted on: 16-02-2011 Use this script to run Java programs as daemons (services) on Linux Centos (or other Red Hat releases). This script originates from a script use to do the same thing in Linux Suse and was adapted for Centos by . Save the code below in a sh file (Ex.: daemon.sh), set the variables at the beginning of the script. To start/stop the daemon using daemon.sh, just use:
./daemon.sh start
./daemon.sh stop
./daemon.sh status
#!/bin/bash## chkconfig: 345 99 05 # description: Java deamon script## A non-SUSE Linux start/stop script for Java daemons.## Derived from -# Home page: http://www.source-code.biz# License: GNU/LGPL (http://www.gnu.org/licenses/lgpl.html)# Copyright 2006 Christian d'Heureuse, Inventec Informatik AG, Switzerland.## History:# 2010-09-21 Josh Davis: Changed 'sudo' to 'su', fix some typos, removed unused variables# 2009-03-04 Josh Davis: Ubuntu/Redhat version.# 2006-06-27 Christian d'Heureuse: Script created.# 2006-07-02 chdh: Minor improvements.# 2006-07-10 chdh: Changes for SUSE 10.0.# Set this to your Java installationJAVA_HOME=/usr/java/latestserviceNameLo="myservice" # service name with the first letter in lowercaseserviceName="MyService" # service nameserviceUser="appuser" # OS user name for the serviceserviceGroup="appgroup" # OS group name for the serviceapplDir="/var/lib/$serviceNameLo" # home directory of the service applicationserviceUserHome="/home/$serviceUser" # home directory of the service userserviceLogFile="/var/log/$serviceNameLo.log" # log file for StdOut/StdErrmaxShutdownTime=15 # maximum number of seconds to wait for the daemon to terminate normallypidFile="/var/run/$serviceNameLo.pid" # name of PID file (PID = process ID number)javaCommand="java" # name of the Java launcher without the pathjavaExe="$JAVA_HOME/bin/$javaCommand" # file name of the Java application launcher executablejavaArgs="-jar $applDir/myservice.jar" # arguments for Java launcherjavaCommandLine="$javaExe $javaArgs" # command line to start the Java service applicationjavaCommandLineKeyword="myservice.jar" # a keyword that occurs on the commandline, used to detect an already running service process and to distinguish it from others# Makes the file $1 writable by the group $serviceGroup.function makeFileWritable { local filename="$1" touch $filename || return 1 chgrp $serviceGroup $filename || return 1 chmod g+w $filename || return 1 return 0; }# Returns 0 if the process with PID $1 is running.function checkProcessIsRunning { local pid="$1" if [ -z "$pid" -o "$pid" == " " ]; then return 1; fi if [ ! -e /proc/$pid ]; then return 1; fi return 0; }# Returns 0 if the process with PID $1 is our Java service process.function checkProcessIsOurService { local pid="$1" if [ "$(ps -p $pid --no-headers -o comm)" != "$javaCommand" ]; then return 1; fi grep -q --binary -F "$javaCommandLineKeyword" /proc/$pid/cmdline if [ $? -ne 0 ]; then return 1; fi return 0; }# Returns 0 when the service is running and sets the variable $pid to the PID.function getServicePID { if [ ! -f $pidFile ]; then return 1; fi pid="$(<$pidFile)" checkProcessIsRunning $pid || return 1 checkProcessIsOurService $pid || return 1 return 0; }function startServiceProcess { cd $applDir || return 1 rm -f $pidFile makeFileWritable $pidFile || return 1 makeFileWritable $serviceLogFile || return 1 cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" su -m $serviceUser -s $SHELL -c "$cmd" || return 1 sleep 0.1 pid="$(<$pidFile)" if checkProcessIsRunning $pid; then :; else echo -ne "\n$serviceName start failed, see logfile." return 1 fi return 0; }function stopServiceProcess { kill $pid || return 1 for ((i=0; i