linuxbashinit.d

Multiple PIDs being stored in PID file


I have a System V init script I've developed that starts a Java program. For some reason whenever the PID file gets created, it contains multiple PIDs instead of one.

Here's the relevant code that starts the service and writes to the PID file:

daemon --pidfile=$pidfile "$JAVA_CMD &" >> $logfile 2>&1
RETVAL=$?
usleep 500000

if [ $RETVAL -eq 0 ]; then
    touch "$lock"

    PID=$(ps aux | grep -vE 'grep|runuser|bash' | grep <myservice> | awk '{print $2}')

    echo $PID > $pidfile

When I test the ps aux... command manually, a single line returns. When running as a script, it appears that this call is returning multiple PIDs.

Example contents in the PID file: 16601 16602 16609 16619 16690. 16619 is the actual process ID found when manually running the ps aux... command mentioned above.


Solution

  • Try reversing your greps. The first one (-vE) may run BEFORE the myservice one starts up. Grep for your service FIRST, then filter out the unwanted lines:

    PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print $2}')