The example below is what you need:
#!/bin/sh
#
# init script for a Java application
#
# Check the application status
#
# This function checks if the application is running
check_status() {
# Running ps with some arguments to check if the PID exists
# -C : specifies the command name
# -o : determines how columns must be displayed
# h : hides the data header
s=`ps -C 'java -jar /path/to/application.jar' -o pid h`
# If somethig was returned by the ps command, this function returns the PID
if [ $s ] ; then
return $s
fi
# In any another case, return 0
return 0
}
# Starts the application
start() {
# At first checks if the application is already started calling the check_status
# function
check_status
# $? is a special variable that hold the "exit status of the most recently executed
# foreground pipeline"
pid=$?
if [ $pid -ne 0 ] ; then
echo "The application is already started"
exit 1
fi
# If the application isn't running, starts it
echo -n "Starting application: "
# Redirects default and error output to a log file
java -jar /path/to/application.jar >> /path/to/logfile 2>&1 &
echo "OK"
}
# Stops the application
stop() {
# Like as the start function, checks the application status
check_status
pid=$?
if [ $pid -eq 0 ] ; then
echo "Application is already stopped"
exit 1
fi
# Kills the application process
echo -n "Stopping application: "
kill -9 $pid &
echo "OK"
}
# Show the application status
status() {
# The check_status function, again...
check_status
# If the PID was returned means the application is running
if [ $? -ne 0 ] ; then
echo "Application is started"
else
echo "Application is stopped"
fi
}
# Main logic, a simple case to call functions
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
esac
exit 0
You just need to replace the colored text with what you need.
This is awesome... but I'm trying to use this on CentOS but this line does not seem to work:
ReplyDeletecheck_status
pid=$?
I've added some echos and the checkstatus does return the correct PID, but the pid=$? always gets "228" which is not the correct one.
I don't suppose you've any suggestions do you?