50a1aef12b
This concerns all services, a.k.a drivers, filesystem drivers, network (inet, lwip, uds) servers, and the system servers. Change-Id: I626fd15c795e15af42df2d10d47fb4a703665d63
84 lines
1.5 KiB
Bash
Executable file
84 lines
1.5 KiB
Bash
Executable file
#!/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: $@"
|
|
|
|
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
|
|
dhcpd --lwip &
|
|
else
|
|
service up /service/inet -script /etc/rs.inet -dev /dev/ip
|
|
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
|