Rev 9 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/sh## nfs This shell script takes care of starting and stopping# the NFS services.## chkconfig: - 30 60# description: NFS is a popular protocol for file sharing across networks.# This service provides NFS server functionality, which is \# configured via the /etc/exports file.# probe: true# config: /etc/sysconfig/nfs### BEGIN INIT INFO# Provides: nfs# Required-Start: $local_fs $network $syslog $rpcbind# Required-Stop: $local_fs $network $syslog $rpcbind# Default-Stop: 0 1 6# Short-Description: Start up the NFS server sevice# Description: NFS is a popular protocol for file sharing across networks \# This service provides NFS server functionality, \# which is configured via the /etc/exports file.### END INIT INFO# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network# Check for and source configuration file otherwise set defaults[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs# Remote quota server[ -z "$RQUOTAD" ] && RQUOTAD=`type -path rpc.rquotad`RETVAL=0uid=`id | cut -d\( -f1 | cut -d= -f2`# See how we were called.case "$1" instart)# Check that networking is up.[ "${NETWORKING}" != "yes" ] && exit 6[ -x /usr/sbin/rpc.nfsd ] || exit 5[ -x /usr/sbin/rpc.mountd ] || exit 5[ -x /usr/sbin/exportfs ] || exit 5# Make sure the rpc.mountd is not already running.if status rpc.mountd > /dev/null ; thenexit 0fi# Only root can start the service[ $uid -ne 0 ] && exit 4# Don't fail if /etc/exports doesn't exist; create a bare-bones# version and continue.[ -r /etc/exports ] || \{ touch /etc/exports && chmod u+rw,g+r,o+r /etc/exports ; } || \{ echo "/etc/exports does not exist" ; exit 0 ; }[ -z "$MOUNTD_NFS_V2" ] && MOUNTD_NFS_V2=default[ -z "$MOUNTD_NFS_V3" ] && MOUNTD_NFS_V3=default# Number of servers to be started by default[ -z "$RPCNFSDCOUNT" ] && RPCNFSDCOUNT=8# Start daemons.[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd start# Set the ports lockd should listen onif [ -n "$LOCKD_TCPPORT" -o -n "$LOCKD_UDPPORT" ]; then[ -x /sbin/modprobe ] && /sbin/modprobe lockd $LOCKDARG[ -n "$LOCKD_TCPPORT" ] && \/sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1[ -n "$LOCKD_UDPPORT" ] && \/sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1fi[ -n "$NLM_GRACE_PERIOD" ] && {/sbin/sysctl -w fs.nfs.nlm_grace_period=$NLM_GRACE_PERIOD >/dev/null 2>&1}# Load the nfsd module so /proc/fs/nfsd will exist[ "$NFSD_MODULE" != "noload" -a -x /sbin/modprobe ] && {/sbin/modprobe nfsd[ -n "$RDMA_PORT" ] && /sbin/modprobe svcrdma}# Set v4 grace period if requested[ -n "$NFSD_V4_GRACE" ] && {echo "$NFSD_V4_GRACE" > /proc/fs/nfsd/nfsv4gracetime}# Set v4 lease period if requested[ -n "$NFSD_V4_LEASE" ] && {echo "$NFSD_V4_LEASE" > /proc/fs/nfsd/nfsv4leasetime}action $"Starting NFS services: " /usr/sbin/exportfs -rif [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; thenecho -n $"Starting NFS quotas: "[ -n "$RQUOTAD_PORT" ] \&& RPCRQUOTADOPTS="$RPCRQUOTADOPTS -p $RQUOTAD_PORT"daemon rpc.rquotad $RPCRQUOTADOPTStouch /var/lock/subsys/rpc.rquotadRETVAL=$?echofi[ -n "$MOUNTD_PORT" ] \&& RPCMOUNTDOPTS="$RPCMOUNTDOPTS -p $MOUNTD_PORT"case $MOUNTD_NFS_V1 inno|NO)RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 1" ;;esaccase $MOUNTD_NFS_V2 inno|NO)RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 2" ;;esaccase $MOUNTD_NFS_V3 inno|NO)RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3" ;;esacecho -n $"Starting NFS mountd: "daemon rpc.mountd $RPCMOUNTDOPTSRETVAL=$?echotouch /var/lock/subsys/rpc.mountdtouch /var/lock/subsys/nfsecho -n $"Starting NFS daemon: "daemon rpc.nfsd $RPCNFSDARGS $RPCNFSDCOUNTRETVAL=$?echo[ $RETVAL -ne 0 ] && exit $RETVAL[ -n "$RDMA_PORT" ] && echo "rdma $RDMA_PORT" > /proc/fs/nfsd/portlist# Let's if we need to signal or start rpc.idmapdif [ -f /var/lock/subsys/rpc.idmapd ]; thenkillproc rpc.idmapd -1 # SIGHUPelse/sbin/service rpcidmapd starttouch /var/lock/subsys/nfs-rpcidmapdfi;;stop)# Only root can stop the service[ $uid -ne 0 ] && exit 4# Stop daemons.echo -n $"Shutting down NFS daemon: "killproc nfsd -2RETVAL=$?echoecho -n $"Shutting down NFS mountd: "killproc rpc.mountdrval=$?[ $RETVAL -eq 0 ] && RETVAL=$rvalechoif [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; thenecho -n $"Shutting down NFS quotas: "killproc rpc.rquotadrval=$?[ $RETVAL -eq 0 ] && RETVAL=$rvalechofi# Reset the lockd ports if they were setif [ -n "$LOCKD_TCPPORT" ]; then/sbin/sysctl -w fs.nfs.nlm_tcpport=0 >/dev/null 2>&1fiif [ -n "$LOCKD_UDPPORT" ]; then/sbin/sysctl -w fs.nfs.nlm_udpport=0 >/dev/null 2>&1fiif [ -n "$NLM_GRACE_PERIOD" ]; then/sbin/sysctl -w fs.nfs.nlm_grace_period=0 >/dev/null 2>&1fi# Do it the last so that clients can still access the server# when the server is running.cnt=`/usr/sbin/exportfs -v | /usr/bin/wc -l`if [ $cnt -gt 0 ]; thenaction $"Shutting down NFS services: " /usr/sbin/exportfs -aurval=$?[ $RETVAL -eq 0 ] && RETVAL=$rvalfi[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop[ -f /var/lock/subsys/nfs-rpcidmapd ] && /sbin/service rpcidmapd stoprm -f /var/lock/subsys/nfsrm -f /var/lock/subsys/nfs-rpcidmapdrm -f /var/lock/subsys/rpc.mountdrm -f /var/lock/subsys/rpc.rquotad;;status)[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd statusstatus rpc.mountdRETVAL=$?status -l nfs nfsdrval=$?[ $RETVAL -eq 0 ] && RETVAL=$rvalif [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; thenstatus rpc.rquotadrval=$?[ $RETVAL -eq 0 ] && RETVAL=$rvalfi;;restart)$0 stop$0 startRETVAL=$?;;reload | force-reload)/usr/sbin/exportfs -r[ -f /var/lock/subsys/nfs ] && touch /var/lock/subsys/nfs;;probe)if [ ! -f /var/lock/subsys/nfs ] ; thenecho $"start"; exit 0fi/sbin/pidof rpc.mountd >/dev/null 2>&1; MOUNTD="$?"/sbin/pidof nfsd >/dev/null 2>&1; NFSD="$?"if [ $MOUNTD = 1 -o $NFSD = 1 ] ; thenecho $"restart"; exit 0fiif [ /etc/exports -nt /var/lock/subsys/nfs ] ; thenecho $"reload"; exit 0fi;;condrestart | try-restart)[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd condrestart[ -f /var/lock/subsys/nfs ] && {$0 stop$0 startRETVAL=$?};;condstop)[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd condstop[ -f /var/lock/subsys/nfs ] && {$0 stopRETVAL=$?};;*)echo $"Usage: nfs {start|stop|status|restart|reload|force-reload|condrestart|try-restart|condstop}"RETVAL=2;;esacexit $RETVAL