Update

I have written a new blog post with an updated script that starts and stops Lucee (Tomcat) as a non-root user on OSX. Click the link to see the details, otherwise keep reading.

 

----------------- original post follows ------------------

 

I have been working on my shell programming and thought I would write a script to start and stop my Lucee (Tomcat) and Nginx servers at the same time as a convenience. You can substitute process names and program commands if you want to use the script with a different combination of programs. This script should work on any system supporting ps, grep, and awk, e.g. linux and OS X.

Note this line:

if [ "$(ps -ef | grep tomcat | grep java | awk ' { print $2 } ')" ]

It checks for a running Tomcat process by using ps and filtering for tomcat, then filtering for java so as to not return the process information for the previous grep command,  which is piped to the grep java command along with the actual tomcat process.

#!/bin/sh

case $1 in
start)
        if [ "$(ps -ef | grep tomcat | grep java | awk ' { print $2 } ')" ]
        then
            echo Tomcat is running
        else
            echo Starting Tomcat ...
            sudo /opt/tomcat/bin/startup.sh
        fi
        if [ "$(ps -ef | grep 'nginx\:' | awk ' {print $2}')" ]
        then
            echo Nginx is running
        else
            echo Starting Nginx ...
            sudo nginx
        fi
        ;;
stop)
        if [ "$(ps -ef | grep tomcat | grep java | awk ' { print $2 } ')" ]
        then
            echo Stopping Tomcat ...
            sudo /opt/tomcat/bin/shutdown.sh
        else
            echo Tomcat is not running
        fi
        if [ "$(ps -ef | grep 'nginx\:' | awk ' {print $2}')" ]
        then
            echo Stopping Nginx ...
            sudo nginx -s stop
        else
            echo Nginx is not running
        fi
    ;;
*)
    echo "Usage: ./lucee start|stop"
    ;;
esac