
IMPORTANT: this change has a docs/UPDATING entry! This rename is unfortunately necessary because NetBSD has decided to create its own service(8) utility, and we will want to import theirs as well. The two can obviously not coexist. Also move ours from /bin to /sbin, as it is a superuser-only utility. Change-Id: Ic6e46ffb3a84b4747d2fdcb0d74e62dbea065039
87 lines
1.6 KiB
Bash
Executable File
87 lines
1.6 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: $@"
|
|
|
|
restarts=$(grep restarts /proc/service/$1 |cut -d: -f2)
|
|
restarts=$(( $restarts + 1 ))
|
|
minix-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
|
|
minix-service up /service/lwip -script /etc/rs.inet -dev /dev/ip -restarts $restarts
|
|
dhcpd --lwip &
|
|
else
|
|
minix-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
|