#!/bin/sh # Recovery script for INET/lwip. It restarts daemons dependent on it in order # to recover TCP state. kill_by_name() { label="$1" pid=`ps ax | grep "$label" | grep -v grep | sed 's,[ ]*\([0-9]*\).*,\1,'` if [ X"$pid" = X ] then return 1 # No such process fi echo "killing pid $pid for $label" kill -9 $pid } daemonize() { # Function to start a daemon, if it exists. local IFS=':' local name="$1" test "$1" = tcpd && name="$2" for dir in $PATH do if [ -f "$dir/$1" ] then # check if this service is disabled at the boot monitor. if disabled $name; then return; fi echo -n " $name" "$@" & return fi done } disabled() { ifs="$IFS"; IFS=, for skip in `sysenv disable` do if [ "$skip" = "$1" ] then IFS="$ifs"; unset ifs return 0 fi done IFS="$ifs"; unset ifs return 1 } exec > /dev/console echo "Arguments: $@" restarts=$(grep restarts /proc/service/$1 |cut -d: -f2) restarts=$(( $restarts + 1 )) service down "$1" kill_by_name dhcpd kill_by_name nonamed kill_by_name syslogd # Wait a moment to let daemons clean themselves up sleep 3 if [ X`/bin/sysenv lwip` = Xyes ] then service up /service/lwip -script /etc/rs.inet -dev /dev/ip -restarts $restarts dhcpd --lwip & else service up /service/inet -script /etc/rs.inet -dev /dev/ip -restarts $restarts daemonize dhcpd fi daemonize nonamed -L daemonize syslogd # Restart SSH daemon if installed and running if [ -f /usr/pkg/etc/rc.d/sshd ] then /usr/pkg/etc/rc.d/sshd status | grep -v not > /dev/null if [ $? -eq 0 ] then /usr/pkg/etc/rc.d/sshd restart fi fi