Сделал поддержку pid-файлов в noserver.pl и nol2auth.pl.
Рестарт скрипта:
kill -HUP `cat /var/run/noserver.pid`
Убитие скрипта:
kill -TERM `cat /var/run/noserver.pid`
Напомню как работает рестарт скриптов. Есть маленький скрипт-вертушка go_noserver.sh,
который запускает noserver.pl, если происходит выход из noserver.pl - он снова запускается. Т.е. для того чтобы сделать рестарт необходимо просто прибить noserver.pl и он будет заново запущен.
Небольшое уточнение: go_noserver.sh смотрит на код, который возвращает noserver.pl, если
0 (получен сигнал HUP): снова запускается noserver.pl
1 (получен сигнал TERM): происходит завершение самого go_noserver.sh
Кстати, не посылайте сигнал -INT т.к. он прибивает процесс, а pid-файл остается. Ничего страшного при этом не произойдет - при запуске noserver.pl мониторит актуальный ли pid. Однако стартовый скрипт будет неправильно функционировать. Кстати вот он:
#!/bin/sh
. /etc/rc.subr
name="noserver"
rcvar=`set_rcvar`
: ${noserver_enable="YES"}
: ${nodeny_dir="/usr/local/nodeny"}
start_cmd="${name}_start"
stop_cmd="${name}_stop"
restart_cmd="${name}_restart"
pidfile="/var/run/${name}.pid"
noserver_start()
{
cd $nodeny_dir
echo -n "Starting $name..."
sh go_noserver.sh &
echo "OK"
}
noserver_stop()
{
cd $nodeny_dir
echo "Stopping $name..."
pid=`cat $pidfile 2>/dev/null`
if [ $pid ];
then
kill -TERM $pid;
echo -n "Waiting pid $pid "
while true
do
if [ ! -f "$pidfile" ]; then break; fi
sleep 1
done
fi
echo "OK"
}
noserver_restart()
{
noserver_stop
noserver_start
}
load_rc_config $name
run_rc_command "$1"
Вообще, он избыточен в том плане, что есть стандартный механизм (/etc/rc.subr) выполнения start/stop/restart/reload путем посылки сигналов процессам. Однако, я потратил дофига времени, но так и не понял, почему /etc/rc.subr не нравится мой pid-файл, видит его, но не признает) Копаться в самом rc.subr было лень. Если кто знает в чем причина - пишите