[DevOps] 如何建立新的Linux系统服务(或以其他用户执行)

以下脚本该置于/etc/init.d 之下,权限让root有'x'(执行), 轮入以下资料:
DAEMON_PATH替换为要跑的脚本的位置
DAEMON 脚本全名
USER 用什么用户名来跑脚本
CONFIGFILE 设定档名称
DAEMONOPTS 执行脚本时要加入的指令
NAME 系统服务名称

DESC 描述


代码:

#!/bin/bash
# myapp daemon
# chkconfig: 345 20 80
# description: myapp daemon
# processname: myappDAEMON_PATH=<DIRECTORY_DAEMON_PLACED>
DAEMON=<SCRIPT_NAME># Specify the user name
USER=<USER_NAME># Specify an alternate config file).
CONFIGFILE="/etc/example.conf"# Additional options that are passed to the Daemon.
DAEMONOPTS="-c $CONFIGFILE"NAME=<APP_NAME>
DESC=<APP_NAME>
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
COMMAND="su $USER -c '"$DAEMON_PATH"/"$DAEMON" "$DAEMONOPTS"' > /dev/null 2>&1 &"case "$1" in
start)printf "%-50s" "Starting $NAME..."#cd $DAEMON_PATHecho "Saving PID" $PID " to " $PIDFILEif [ ! -z "LC_CTYPE" ]; thenecho "Setting LC_CTYPE env variable to be en_US.utf-8";export LC_CTYPE="en_US.utf-8"fieval $COMMANDPID=$!if [ -z $PID ]; thenprintf "%s\n" "Fail"elseecho $PID > $PIDFILEprintf "%s\n" "Ok"fi
;;
status)printf "%-50s" "Checking $NAME..."if [ -f $PIDFILE ]; thenPID=`cat $PIDFILE`if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; thenprintf "%s\n" "Process dead but pidfile exists"elseecho "Running"fielseprintf "%s\n" "Service not running"fi
;;
stop)printf "%-50s" "Stopping $NAME"PID=`cat $PIDFILE`cd $DAEMON_PATHif [ -f $PIDFILE ]; thenkill -TERM $PIDprintf "%s\n" "Ok"rm -f $PIDFILEelseprintf "%s\n" "pidfile not found"fi
;;restart)$0 stop$0 start
;;*)echo "Usage: $0 {status|start|stop|restart}"exit 1
esac