#!/bin/bash  
#  
# Description:  This shell script takes care of starting and stopping dennis  
#  
# Source function library  

#the service name  for example: dennis  
SNAME=filemonitor

#the full path and name of the daemon program  
#Warning: The name of executable file must be identical with service name  
echo $HOME
echo $USER

JYN_PATH=$(cd `dirname $0`;pwd)
PROG=$JYN_PATH/$SNAME
PRELOAD_PATH=$JYN_PATH/zyhook.so
PRELOAD_NAME=zyhook.so
PRELOAD_CFG=/etc/ld.so.preload
KO_PATH=$JYN_PATH/ZDFY001.ko
LD_HOOK_PATH=`ldconfig -p | grep libc.so | head -n 1 |  awk '{print $NF}'`
LD_HOOK_PATH=`dirname $LD_HOOK_PATH`
#JEMALLOC1_PATH=$JYN_PATH/zav/libjemalloc.so.1
#JEMALLOC2_PATH=$JYN_PATH/zav/libjemalloc.so.2
sd_watch=1048576

# start function  
start() {
	if test -e $KO_PATH ; then
		insmod $KO_PATH
	fi

    if test -e $PRELOAD_PATH; then
        if ! test -e $PRELOAD_CFG; then
            touch $PRELOAD_CFG
            chmod 777 $PRELOAD_CFG
        fi

        cp -b $PRELOAD_PATH $LD_HOOK_PATH

        sed -i "/$PRELOAD_NAME/d" $PRELOAD_CFG
        echo $LD_HOOK_PATH/$PRELOAD_NAME >> $PRELOAD_CFG
    fi

	if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
		echo never > /sys/kernel/mm/transparent_hugepage/enabled
	fi

	if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
		echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
	fi

	export LD_LIBRARY_PATH=$JYN_PATH:$JYN_PATH/rtl:$LD_LIBRARY_PATH

	sysctl vm.overcommit_memory=1
	sysctl fs.inotify.max_user_instances=1024

	cur_watch=`sysctl fs.inotify.max_user_watches  | cut -d ' ' -f 3`
	if [ $sd_watch -gt  $cur_watch ] ; then
		sysctl fs.inotify.max_user_watches=$sd_watch
	fi

	if test -f $JEMALLOC1_PATH ; then
		export LD_PRELOAD=$JEMALLOC1_PATH
	elif test -f $JEMALLOC2_PATH ; then
		export LD_PRELOAD=$JEMALLOC2_PATH
	fi
	$PROG >/dev/null 2>&1 &

#check the daemon status first  
#	if test -e $KO_PATH ; then
#		insmod $JYN_PATH/ZDFY001.ko
#		if [ "$?" == "0" ] ; then
#			$PROG  
#		else 
#			echo "$KO_PATH install failed"
#		fi
#	else
#		echo "$KO_PATH not exists"
#	fi
}  

#stop function  
stop() {
	$PROG stopSelfProtect
    kill -9 `pidof $SNAME`
#	PID=`pidof $SNAME`
#	if [ "$PID" = "" ] ; then
#		echo "$SNAME not running"
#	else
#		kill -9 `pidof $SNAME`
#	fi

    if test -e $PRELOAD_CFG; then
		sed -i "/$PRELOAD_NAME/d" $PRELOAD_CFG
    fi

	if test -e $KO_PATH ; then
		rmmod $KO_PATH 
	fi
    
    if test -e $LD_HOOK_PATH/$PRELOAD_NAME; then
        rm $LD_HOOK_PATH/$PRELOAD_NAME
    fi
}  

case "$1" in  
start)  
start  
;;  
stop)  
stop  
;;  
reload|restart)  
stop  
start  
;;  
status)  
status $SNAME  
;;  
*)  
echo $"Usage: $0 {start|stop|restart|status}"  
exit 1  
esac  
