zfs-fuse/zfs-fuse-helper

217 lines
4.6 KiB
Bash

#! /bin/bash
# Source function library.
. /etc/rc.d/init.d/functions
prog="zfs-fuse"
exec="/usr/sbin/$prog"
config=/etc/sysconfig/$prog
[ -e $config ] && . $config
PIDFILE=/var/run/$prog.pid
unset LANG
ulimit -v unlimited
ulimit -c 512000
ulimit -l unlimited
ulimit -s unlimited
start() {
[ -x $exec ] || (echo "$prog binary not present or executable" && exit 5)
PID=`pidofproc $prog`
start_status=$?
case "$start_status" in
0)
echo "ZFS-FUSE is already running with pid $pid"
exit 3
;;
1)
echo "Cleaning up stale $prog PID file in $PIDFILE"
rm -f "$PIDFILE"
;;
3)
# not running
;;
*)
echo "Huh?"
exit 99
esac
if [ "$ZFS_KILL_ORPHANS" == "yes_really" ] ; then
echo -n Killing processes with unknown working directory:
for a in 1 2 3 4 5 ; do
orphans=`lsof -w -n | awk '$4 == "cwd" && $5 == "unknown" {print $2}'`
echo -n $orphans
[ "$orphans" == "" ] && break
echo -n .
kill $orphans
sleep 1
done
orphans=`lsof -w -n | awk '$4 == "cwd" && $5 == "unknown" {print $2}'`
if [ "$orphans" != "" ] ; then
echo_failure ; echo
echo -n Some orphans still live: $orphans Killing with signal 9
kill -9 $orphans
fi
orphans=`lsof -w -n | awk '$4 == "cwd" && $5 == "unknown" {print $2}'`
if [ "$orphans" != "" ] ; then
echo_failure ; echo
echo -n Some orphans still live: $orphans
echo_failure ; echo
exit 8
fi
echo_success ; echo
fi
echo -n $"Starting $prog: "
daemon $exec -p "$PIDFILE"
exec_retval=$?
echo
[ $exec_retval -ne 0 ] && return $exec_retval
for a in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
PID=`pidofproc $prog`
[ "$PID" != "" ] && break
echo -n "."
sleep 1
done
if [ "$PID" = "" ] ; then
echo "ZFS-FUSE did not start or create $PIDFILE"
exit 3
fi
echo -n "Immunizing $prog against OOM kills"
echo -17 > "/proc/$PID/oom_score_adj"
ES_TO_REPORT=$?
if [ "$ES_TO_REPORT" -ne 0 ] ; then
echo_warning
echo "code $ES_TO_REPORT"
exit 3
fi
echo_success
echo
if [ "$ZFS_AUTOMOUNT" == "1" ] ; then
echo "Deprecated use of ZFS_AUTOMOUNT option. Use ZFS_AUTOMOUNT=yes instead."
ZFS_AUTOMOUNT=yes
fi
if [ "$ZFS_AUTOMOUNT" == "yes" ] ; then
echo -n $"Mounting zfs partitions: "
sleep 1
rm -f /var/lib/random-seed
zfs mount -a
zfs_mount_retval=$?
if [ $zfs_mount_retval = 0 ]; then
echo_success
else
echo_warning
echo zfs mount failed with code $zfs_mount_retval
fi
echo
fi
# if [ -x /nonexistent -a -x /usr/bin/renice ] ; then # DISABLED
# log_action_begin_msg "Increasing ZFS-FUSE priority"
# /usr/bin/renice -15 -g $PID > /dev/null
# ES_TO_REPORT=$?
# if [ 0 = "$ES_TO_REPORT" ] ; then
# log_action_end_msg 0
# else
# log_action_end_msg 1 "code $ES_TO_REPORT"
# exit 3
# fi
# true
# fi
return $exec_retval
}
stop() {
status_quiet || return 0
[ -x $exec ] || (echo "$prog binary not present or executable" && exit 5)
PID=`pidofproc $prog`
if [ "$PID" != "" ] ; then
echo -n "Syncing disks"
sync
echo_success
echo
echo -n "Unmounting ZFS filesystems"
zfs unmount -a
ES_TO_REPORT=$?
if [ 0 = "$ES_TO_REPORT" ] ; then
echo_success
else
echo_warning
fi
echo
fi
echo -n $"Stopping $prog: "
killproc $prog
kill_retval=$?
echo
if [ "$PID" != "" ] ; then
echo -n "Syncing disks again"
sync
echo_success
echo
fi
return $kill_retval
}
restart() {
stop
start
}
pool_status() {
# run checks to determine if the service is running or use generic status
status $prog && /usr/sbin/zpool status
}
pool_status_quiet() {
pool_status >/dev/null 2>&1
}
status_quiet() {
status $prog >/dev/null 2>&1
}
case "$1" in
start)
status_quiet && exit 0
$1
;;
stop)
$1
;;
# restart)
# restart
# ;;
# reload)
# restart
# ;;
# force-reload)
# restart
# ;;
# status)
# pool_status
# ;;
# condrestart|try-restart)
# pool_status_quiet || exit 0
# restart
# ;;
*)
# echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?