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@sentinel:~$ su
Password:
with power comes great responsibility
root@sentinel:/home/sentinel# PID=`pidof -o %PPID -x /usr/sbin/proftpd`
root@sentinel:/home/sentinel# echo $PID
7469
root@sentinel:/home/sentinel# [ -z "$PID" ] && echo "pid is empty"
root@sentinel:/home/sentinel#
Tom
Dan McGee wrote:
On Feb 8, 2008 1:27 PM, Michael Krauss <hippodriver@xxxxxxx> 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