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

Sentinel kanocz at intrak.sk
Fri Feb 8 15:06:37 EST 2008


Hi!

It works perfectly (at least for me), just you have to ensure, that you 
call it with appropriate rights while testing:
my testing:
sentinel at sentinel:~$ su
Password:
with power comes great responsibility
root at sentinel:/home/sentinel# PID=`pidof -o %PPID -x /usr/sbin/proftpd`
root at sentinel:/home/sentinel# echo $PID
7469
root at sentinel:/home/sentinel# [ -z "$PID" ] && echo "pid is empty"
root at sentinel:/home/sentinel#

Tom

Dan McGee wrote:
> 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