153 lines
2.8 KiB
Bash
153 lines
2.8 KiB
Bash
#! /bin/sh
|
|
|
|
# chkconfig: 12345 13 87
|
|
# description: Starts and stops the ZFS file systems
|
|
# author: Manuel Amador (Rudd-O)
|
|
|
|
PIDFILE=/var/run/zfs-fuse.pid
|
|
LOCKFILE=/var/lock/zfs/zfs_lock
|
|
|
|
# Source function library.
|
|
. /etc/init.d/functions
|
|
|
|
# Source cmdline opts
|
|
OPTIONS=
|
|
[ -f /etc/sysconfig/zfs-fuse ] && . /etc/sysconfig/zfs-fuse
|
|
|
|
export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
|
|
unset LANG
|
|
ulimit -v unlimited
|
|
ulimit -c unlimited
|
|
ulimit -l unlimited
|
|
|
|
do_start() {
|
|
PID=$(cat "$PIDFILE" 2> /dev/null)
|
|
if [ "$PID" != "" ]
|
|
then
|
|
if kill -0 $PID 2> /dev/null
|
|
then
|
|
echo -n "ZFS-FUSE is already running"
|
|
failure
|
|
exit 3
|
|
else
|
|
# pid file is stale, we clean up shit
|
|
action "Cleaning up stale ZFS-FUSE PID files" rm -f "$PIDFILE"
|
|
fi
|
|
fi
|
|
|
|
export DAEMON_COREFILE_LIMIT=unlimited
|
|
action "Starting ZFS-FUSE process" daemon --pidfile $PIDFILE zfs-fuse -p "$PIDFILE" $OPTIONS
|
|
ES_TO_REPORT=$?
|
|
if [ 0 != $ES_TO_REPORT ] ; then
|
|
exit $ES_TO_REPORT
|
|
fi
|
|
|
|
for a in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
|
do
|
|
PID=$(cat "$PIDFILE" 2> /dev/null)
|
|
[ "$PID" != "" ] && break
|
|
sleep 1
|
|
done
|
|
|
|
if [ "$PID" = "" ]
|
|
then
|
|
echo -n "ZFS-FUSE did not start or create $PIDFILE"
|
|
failure
|
|
exit 3
|
|
fi
|
|
|
|
action "Immunizing ZFS-FUSE against OOM kills and sendsigs signals" true
|
|
echo -17 > "/proc/$PID/oom_adj"
|
|
ES_TO_REPORT=$?
|
|
if [ 0 != $ES_TO_REPORT ] ; then
|
|
exit $ES_TO_REPORT
|
|
fi
|
|
|
|
sleep 1
|
|
action "Mounting ZFS filesystems" zfs mount -a
|
|
ES_TO_REPORT=$?
|
|
if [ 0 != $ES_TO_REPORT ] ; then
|
|
exit $ES_TO_REPORT
|
|
fi
|
|
|
|
}
|
|
|
|
do_stop () {
|
|
PID=$(cat "$PIDFILE" 2> /dev/null)
|
|
if [ "$PID" = "" ] ; then
|
|
# no pid file, we exit
|
|
exit 0
|
|
elif kill -0 $PID 2> /dev/null; then
|
|
# pid file and killable, we continue
|
|
true
|
|
else
|
|
# pid file is stale, we clean up shit
|
|
action "Cleaning up stale ZFS-FUSE PID files" rm -f "$PIDFILE"
|
|
exit 0
|
|
fi
|
|
|
|
action "Syncing disks" sync
|
|
|
|
action "Unmounting ZFS filesystems" zfs unmount -a
|
|
ES_TO_REPORT=$?
|
|
if [ 0 != $ES_TO_REPORT ] ; then
|
|
exit $ES_TO_REPORT
|
|
fi
|
|
|
|
action "Terminating ZFS-FUSE process gracefully" kill -TERM $PID
|
|
|
|
for a in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
|
do
|
|
kill -0 $PID 2> /dev/null
|
|
[ "$?" != "0" ] && break
|
|
sleep 1
|
|
done
|
|
|
|
if kill -0 $PID 2> /dev/null
|
|
then
|
|
echo -n "ZFS-FUSE refused to die after 15 seconds"
|
|
failure
|
|
exit 3
|
|
else
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
|
|
action "Syncing disks again" sync
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
do_start
|
|
;;
|
|
stop)
|
|
do_stop
|
|
;;
|
|
status)
|
|
PID=$(cat "$PIDFILE" 2> /dev/null)
|
|
if [ "$PID" = "" ] ; then
|
|
echo "ZFS-FUSE is not running"
|
|
exit 3
|
|
else
|
|
if kill -0 $PID
|
|
then
|
|
echo "ZFS-FUSE is running, pid $PID"
|
|
zpool status
|
|
exit 0
|
|
else
|
|
echo "ZFS-FUSE died, PID files stale"
|
|
exit 3
|
|
fi
|
|
fi
|
|
;;
|
|
restart|reload|force-reload)
|
|
echo "Error: argument '$1' not supported" >&2
|
|
exit 3
|
|
;;
|
|
*)
|
|
echo "Usage: $0 start|stop|status" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
|
|
:
|