#!/bin/bash # # rc.ip2cn-server -- 2008-08-11, last edit 2009-12-23 # # ip2cn-server daemon start/stop/restart/reload script # # Copyright (C) 2008,2009 Grant Coady GPLv2 # # Info and latest version see: http://bugs.id.au/ip2cn/ # progname="ip2cn-server" codepath=$(gawk '/^codepath/ {print $2; exit}' /etc/ip2cn-server.conf) inetport=$(gawk '/^inetport/ {print $2; exit}' /etc/ip2cn-server.conf) server="$codepath/$progname" pidfile="/var/run/ip2cn-server.pid" verbose= [ "$2" == "-v" ] && verbose=1 ip2cn_stop() { if [ -r $pidfile ] then [ $verbose ] && echo "signal graceful shutdown" local count=5 kill -SIGINT $(cat $pidfile) 2>/dev/null while [ $count -gt 0 ] do [ $verbose ] && echo "wait for shutdown, $count" sleep 1 [ -r $pidfile ] || break count=$(( count - 1 )) done [ -r $pidfile ] || return [ $verbose ] && echo "ungraceful shutdown" kill -SIGTERM $(cat $pidfile) 2>/dev/null sleep 1 [ -r $pidfile ] || return fi [ $verbose ] && echo "$pidfile stale or missing" listen=$(netstat -l |grep $inetport |grep -c LISTEN) [ $listen -eq 0 ] && rm -f $pidfile && echo "server not running" && return [ $verbose ] && echo "server running, get pid" pid=$(ps -C $server -o pid=) [ -z "$pid" ] && [ $verbose ] && echo "odd, no pid!" [ -z "$pid" ] && return [ $verbose ] && echo "repair $pidfile, retry" echo $pid > $pidfile && ip2cn_stop # recursion! } ip2cn_start() { if [ -r $pidfile ] then pid=$(cat $pidfile) run=$(ps -p $pid -o comm=) if [ -z "$run" ] then [ $verbose ] && echo "removing stale $pidfile" rm $pidfile else [ $verbose ] && echo "server is running, use: $0 restart" exit 1 fi fi [ $verbose ] && echo "starting $server" $server -j -d && return pid=$(ps -C $server -o pid=) [ -z "$pid" ] && [ $verbose ] && echo "problem starting server" && return [ $verbose ] && echo "server is running, repair $pidfile" echo $pid > $pidfile } case $1 in start) ip2cn_start ;; stop) ip2cn_stop ;; restart) ip2cn_stop; ip2cn_start ;; reload) [ -r $pidfile ] && kill -SIGUSR1 $(cat $pidfile) 2>/dev/null ;; *) echo >&2 " usage: rc.ip2cn-server start|stop|restart|reload [-v] start start ip2cn-server if not running stop stop ip2cn-server if running restart stop then start ip2c-server reload signal ip2cn-server to reload database files -v be verbose, for debug " exit 1 ;; esac #end