瀏覽代碼

Implemented production/debug mode for snf-server.openbsd.


git-svn-id: https://svn.microneil.com/svn/PKG-SNF-CS-NIX/trunk@40 233e721a-07f6-49eb-a7da-05e0e16828fc
master
adeniz 15 年之前
父節點
當前提交
90b1cc19cf
共有 2 個檔案被更改,包括 148 行新增36 行删除
  1. 5
    0
      SNF_CS_Developer_Package/ChangeLog
  2. 143
    36
      SNF_CS_Developer_Package/Scripts/snf-server.openbsd

+ 5
- 0
SNF_CS_Developer_Package/ChangeLog 查看文件

@@ -1,3 +1,8 @@
2009-06-30 Alban Deniz <adeniz@skidmark.localdomain>

* Scripts/snf-server.openbsd: Implement debug mode and production
mode (Copied from snf-milter.openbsd in snf-milter distribution).

2009-06-29 Alban Deniz <adeniz@skidmark.localdomain>

* Scripts/snf-server.freebsd: Implement debug mode and production

+ 143
- 36
SNF_CS_Developer_Package/Scripts/snf-server.openbsd 查看文件

@@ -1,13 +1,32 @@
#!/bin/sh
#
# SNFServer This shell script takes care of starting and stopping
# the MicroNeil SNFServer daemon for OpenBSD systems.
# snf-server. Starts and stops the SNFServer daemon (OpenBSD).
#
# Author: Alban Deniz
#
# Copyright (C) 2008 ARM Research Labs, LLC.
# See www.armresearch.com for the copyright terms.
#

# Directory to run in.
runDir=PREFIX/share/PACKAGE_NAME

# Define mode files.
debugModeFile=$runDir/debug_mode
productionModeFile=$runDir/production_mode

# Set debug mode flag.
if [ -f $debugModeFile ]
then
debugMode=true
fi

# Debug output file.
debugOutputFile=/var/log/PACKAGE_NAME/debug.log

# ktrace output file.
ktraceOutputFile=/var/log/PACKAGE_NAME/ktrace.out

# Location of installation.
installedDir="PREFIX"

@@ -18,7 +37,8 @@ dir="$installedDir/sbin"
configFile="CONFFILE"

# Name of daemon.
prog="SNFServer"
debugProg="SNFDebugServer"
productionProg="SNFServer"

# Name of client.
clientProg="SNFClient"
@@ -26,22 +46,78 @@ clientProg="SNFClient"
# Name of user to run as.
userName="snfilter"

# Start command.
snfStartCmd="$dir/$prog $configFile > /dev/null 2>&1 &"
#
# Function to create the mode file.
#
createModeFile()
{
fileName=$1

# Remove any existing mode files.
rm -f $productionModeFile $debugModeFile $fileName
(
echo "PACKAGE_NAME mode file"
echo
echo "This file specifies whether PACKAGE_NAME is configured to run in"
echo "production mode or debug mode. If the name of this file is"
echo "'production_mode', then PACKAGE_NAME is configured to run in"
echo "production mode. If the name is 'debug_mode', then PACKAGE_NAME is"
echo "configured to run in debug mode."
echo
echo "To run in debug mode:"
echo
echo " 1) Run 'PACKAGE_NAME debug_mode'"
echo
echo " 2) Run 'PACKAGE_NAME restart' (if PACKAGE_NAME is already running),"
echo " or 'PACKAGE_NAME start' (to start PACKAGE_NAME)"
echo
echo "To run in production mode:"
echo
echo " 1) Run 'PACKAGE_NAME production_mode'"
echo
echo " 2) Run 'PACKAGE_NAME restart' (if PACKAGE_NAME is already running),"
echo " or 'PACKAGE_NAME start' (to start PACKAGE_NAME)"
echo
echo "By default, PACKAGE_NAME is configured to run in production mode."
) > $fileName

}

start(){
SNFPID=`ps -axww | grep $dir/$prog | grep -v grep | awk '{print $1}'`
echo -n " $prog "
if [ -n "$SNFPID" ] ; then
echo "already running"
return 1
echo -n " $productionProg "

for prog in $productionProg $debugProg
do
SNFPID=`ps -axww | grep $dir/$prog | grep -v grep | awk '{print $1}'`
if [ -n "$SNFPID" ] ; then
echo "already running"
return 1
fi
done

# Start.
if [ $debugMode ]
then

# Enable core dumps and start with ktrace and output redirected.
(ulimit -c unlimited; \
su -m $userName -c \
"echo Starting $dir/$debugProg on $(date) >> $debugOutputFile"; \
cd PREFIX/share/PACKAGE_NAME; \
su -m $userName -c \
"ktrace -f $ktraceOutputFile $dir/$debugProg $configFile >> $debugOutputFile 2>&1 &")

else
su -m $userName -c "$snfStartCmd" > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
$dir/$clientProg -status.second > /dev/null 2>&1
RETVAL=$?
fi

(cd PREFIX/share/PACKAGE_NAME; \
su -m $userName -c "$dir/$productionProg $configFile > /dev/null 2>&1 &" \
> /dev/null 2>&1)
fi

RETVAL=$?
if [ $RETVAL -eq 0 ]; then
$dir/$clientProg -status.second > /dev/null 2>&1
RETVAL=$?
fi
if [ $RETVAL -eq 0 ]; then
echo "started "
@@ -51,24 +127,35 @@ start(){
return $RETVAL
}

getPID(){
ps -axww | grep $1 | grep -v grep | awk '{print $1}'
}

stopFunction(){
echo -n " $prog "
SNFPID=`ps -axww | grep $dir/$prog | grep -v grep | awk '{print $1}'`
if [ -n "$SNFPID" ]; then
DEBUG_SNFPID=`getPID $dir/$debugProg`
PRODUCTION_SNFPID=`getPID $dir/$productionProg`
if [ -n "$DEBUG_SNFPID" ] || [ -n "$PRODUCTION_SNFPID" ]; then
$dir/$clientProg -shutdown > /dev/null 2>&1
sleep 10
SNFPID=`ps -axww | grep $dir/$prog | grep -v grep | awk '{print $1}'`
if [ -n "$SNFPID" ]; then
kill $SNFPID
RETVAL=$?
else
RETVAL=0
fi
echo -n "stopped"

# Check that the programs are no longer running.
RETVAL=0
for prog in $debugProg $productionProg
do

SNFPID=`getPID $dir/$prog`
if [ -n "$SNFPID" ]; then
kill $SNFPID
RETVAL=$(($RETVAL+$?))
fi
done
echo -n "stopped"
else
echo -n "not running"
RETVAL=1
fi

echo ""
return $RETVAL
}
@@ -79,14 +166,20 @@ restart(){
}

status(){
SNFPID=`ps -axww | grep $dir/$prog | grep -v grep | awk '{print $1}'`
if [ -n "$SNFPID" ] ; then
echo "$prog (pid $SNFPID) is running"
return 0
else
echo "$prog is not running"
return 0
fi
# Check whether the programs are running.
RETVAL=0
for progName in $debugProg $productionProg
do

SNFPID=`getPID $dir/$progName`
if [ -n "$SNFPID" ]; then
echo "$progName (pid $SNFPID) is running"
RETVAL=$(($RETVAL+1))
else
echo "$progName is not running"
fi
done
return 0
}

# See how we were called.
@@ -98,13 +191,27 @@ case "$1" in
stopFunction
;;
status)
status $prog
status
;;
restart)
restart
;;
debug_mode)
#
# Remove any mode flags, and create the debug_mode file.
#
echo "Switching to debug mode"
createModeFile $debugModeFile
;;
production_mode)
#
# Remove any mode flags, and create the debug_mode file.
#
echo "Switching to production mode"
createModeFile $productionModeFile
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
echo "Usage: $0 {start|stop|status|restart|production_mode|debug_mode}"
exit 1
esac


Loading…
取消
儲存