[arch-general] get pid of daemon in init script

Dan McGee dpmcgee at gmail.com
Fri Feb 8 14:39:10 EST 2008


On Feb 8, 2008 1:27 PM, Michael Krauss <hippodriver at gmx.net> wrote:
> Hi to .*
>
> I must write a rc init script for a server I am packaging.
> Therefor I have copied the init script of cups.
> Now I recognized that both pid files, cups.pid and my own, in /var/run
> are empty.
>
> Further investigations have shown that
>
> "pidof -o %PPID -x /usr/bin/cdvserver"
>
> returns nothing in the start) case but in stop) it seems to work.
> I don't understand why pidof isn't working as expected.

Because you are calling pidof before the process starts- bash does not
do lazy evaluation of your expressions.

If you want to store the PID of the newly started process, you will
have to make another PID=... call to get it in the else block where
you access it.

> Here is my init script:
> #!/bin/bash
>
> . /etc/rc.conf
> . /etc/rc.d/functions
>
> PID=`pidof -o %PPID -x /usr/bin/cdvserver`
> PIDFILE="/var/run/cdvserver.pid"
> case "$1" in
>   start)
>     stat_busy "Starting Codeville Server"
>     [ -z "$PID" ] && /usr/bin/cdvserver
>     if [ $? -gt 0 ]; then
>       stat_fail
>     else
>       echo "Started " $PID
>       echo $PID > $PIDFILE
>       add_daemon cdv
>       stat_done
>     fi
>     ;;
>   stop)
>     stat_busy "Stopping Codeville Server"
>     [ ! -z "$PID" ]  && kill $PID &> /dev/null
>     if [ $? -gt 0 ]; then
>       stat_fail
>     else
>       rm $PIDFILE
>       rm_daemon cdv
>       stat_done
>     fi
>     ;;
>   restart)
>     $0 stop
>     sleep 1
>     $0 start
>     ;;
>   *)
>     echo "usage: $0 {start|stop|restart}"
> esac
> exit 0
>
>




More information about the arch-general mailing list