为程序编写Service服务管理脚本

SaltStack通过Service方式管理服务,对于通用的服务,如mysql、apache、php等,自带service服务管理脚本,SaltStack可以方便管理。但是对于一些公司自有的服务,可能这些服务在开发之初,并没有考虑日后会采用Service脚本进行服务管理,为了统一Salt对服务的管理,我采用的方式是为每一个程序编写Service脚本。

这里主要注意以下两个问题:

1.这里有部分机器的优化,放在/etc/profile和/root/.bashrc中,而这两个文件在用户登陆的时候,会自动执行,而通过salt管理服务器,并不会执行这两个文件,所以在脚本中有导入这两个文件的操作;

2.之前服务启动的方式为nohup prog_name &这种形式,这个命令执行过后,还要有个敲回车键的操作,来确认结果输出到nohup.out文件,这里通过制定输出文件为nohup.out的方式,避免这个操作。

脚本如下:

#!/bin/sh
# FileName: MobileStkServerd
# Description:  This shell script takes care of starting and stopping MobileStkServer
# Guibin created on Oct. 17th, 2014
# version 1.2-2014.11.07
# Source env
. /etc/profile
. /root/.bashrc
#the service name  for example: MobileStkServer
FileName=MobileStkServerd
DAEN_NAME=MobileStkServer
DAEN_PATH=/home/MobileServer/

#the full path and name of the daemon DAEN_RUNram
#Warning: The name of executable file must be identical with service name
DAEN_RUN="nohup ./$DAEN_NAME > nohup.out &"

# check program file
check_profile(){
	PRO_FILE="$DAEN_PATH$DAEN_NAME"
	if [ ! -f "$PRO_FILE" ]
	then 
		echo "$PRO_FILE: No such file or directory"
		exit 1
	elif [ ! -x "$PRO_FILE" ]
	then
		echo "$PRO_FILE: Permission denied"
		exit 1
	fi
}

# status function
check_status(){
	check_profile
	DAEN_PID=‘‘
	DAEN_PID=$(ps -ef|grep "$DAEN_NAME"|grep -v grep|grep -v "$FileName"|awk ‘{print $2}‘)
		if [ -n "$DAEN_PID" ] 
		then
			DAEN_STATUS=‘sstart‘
		else
			DAEN_STATUS=‘sstop‘
		fi
}

status(){
	check_status
	if [ "$DAEN_STATUS"x == ‘sstartx‘ ] 
	then
		echo -e "$DAEN_NAME is running with pid: $DAEN_PID"
	else
		echo -e "$DAEN_NAME is not running!"
	fi
}

# start function
start() {
    #check the daemon status first
	check_status
    if [ "$DAEN_STATUS"x == ‘sstartx‘ ]
    then
        echo "$DAEN_NAME has already started!"
    else
        cd $DAEN_PATH
        printf "Starting $DAEN_NAME ..."
        eval $DAEN_RUN 
	sleep 1
        DAEN_PID=$(ps -ef|grep "$DAEN_NAME"|grep -v grep|grep -v "$FileName"|awk ‘{print $2}‘)
        if [ -n "$DAEN_PID" ] 
        then
			echo -e "\t\t\t\t[ OK ]"
			echo -e "$DAEN_NAME is running with pid: $DAEN_PID"
        else
			echo -e "\t\t\t\t[ Failed ]"
			exit 1
        fi
    fi
}

#stop function
stop() {
	#check the daemon status first
	check_status
    if [ "$DAEN_STATUS"x == ‘sstopx‘ ]
    then
        echo "$DAEN_NAME has already stopped!"
    else
		i=0
		while [ $i -lt 10 ]
		do
			`/sbin/pidof $DAEN_NAME |xargs /bin/kill`
			sleep 1

			check_status
			if [ "$DAEN_STATUS"x == ‘sstopx‘ ]
			then
				echo -e "Stopping $DAEN_NAME ...\t\t\t\t[ OK ]"
				break
			else
				i=`expr $i+1`
			fi
		done

		check_status
		if [ "$DAEN_STATUS"x == ‘sstartx‘ ]
		then
			echo -e "Stopping $DAEN_NAME ...\t\t\t\t[ Failed ]"
			exit 1
		fi
	fi
}

case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
reload|restart)
  stop
  sleep 2
  start
  ;;
status)
  status
  ;;
*)
  echo $"Usage: $0 {start|stop|restart|status|reload}"
  exit 1
esac
时间: 2024-10-13 10:49:44

为程序编写Service服务管理脚本的相关文章

如何写SysV服务管理脚本

本文目录: 1.1 SysV脚本的特性1.2 SysV脚本要具备的能力1.3 start函数分析1.4 stop函数分析1.5 reload函数分析1.6 status.restart.force-reload等1.7 结束语 SysV服务管理脚本和/etc/rc.d/init.d/functions文件中的几个重要函数(包括daemon,killproc,status以及几个和pid有关的函数)"关系匪浅".本人已对该文件做了极详细的分析和说明,参考functions文件详细分析和说

转自ruby迷: 使用Net::SSH和Net::SCP编写Linux服务器管理脚本

试了一下perl下安装ssh模块,整了半天linux/window上都装不上,各依赖模块的版本总是匹配不上,后改了一下思路,用ruby吧 Net::SSH和Net::SCP是两个Ruby操作SSH的gem包.Net::SSH相当于cmd,专门用于执行命令:Net::SCP专门用于传输文件.它们俩结合,可以做任何SSH client能做的事情. 安装: gem install net-ssh gem install net-scp 以下所有代码都引用这段代码 require 'net/ssh' r

利用BashShell编写Nginx服务控制脚本

使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的服务控制脚本. 可以使用的选项有: start  启动 stop  停止 reload 重载 restart  重启 status   状态 test 检查配置文件 1.创建脚本文件并添加执行权限 # touch /etc/init.d/nginx # chmod +x /etc/init.d/nginx 2

linux 程序启动与停止管理脚本

公司接了一个第三方的系统,基于linux写的几个程序,一共有9个部件,第三方没有给脚本,每次启动或停止都得一个一个手工去停止或修改.......,这里稍微鄙视下. 没办法,求人还不如自己动手写, 需求简单:就是将这9个部件同时管理,可以启动与停止,可以查看当前是否运行. 脚本如下 #!/bin/bash . /etc/init.d/functions devsNum=`ps -eo comm,pid|awk '/sdk_devs/'|wc -l` gatewayNum=`ps -eo comm,

编写Nginx服务控制脚本

./configure --user=www --group=www --prefix=/application/nginx --sbin-path=/application/nginx/sbin --conf-path=/application/nginx/conf/nginx.conf --error-log-path=/application/nginx/logs/error.log --http-log-path=/application/nginx/logs/access.log --

服务管理脚本(SHELL)

devops-jenkins-master01]# cat console 脚本 #! /usr/bin/bash case $1 in start) echo "Jenkins:服务启动..."; su - jenkins -c "/chj/app/chj-jenkins-master/bin/catalina.sh start" ;; stop) echo  "Jenkins:服务停止..."; su - jenkins -c "/

nginx 源码编译安装并编写服务启动脚本

1. 使用xshell将nginx源码包上传到server 2. 安装依赖的软件包工具 zlib-devel?? pcre-devel?? gcc? gcc-c++ yum -y install zlib-devel pcere-devel gcc gcc-c++ 验证一下: 3. 指定nginx的运行用户 (创建nginx用户不使其登录系统.-M不创建宿主目录) [[email protected] ~]# useradd -s /sbin/nologin -M nginx 4. 编译安装ng

线上多服务管理工具实例剖析

公司线上对nginx.tomcat和jar包的java应用的服务管理脚本之前都是单独分离开的,这样子就造成了运维人员在跳板机上进行服务管理的时非常的不方便.特别是把这些服务管理框架纳入到自动化管理平台时,没有一个统一的服务管理接口去使用. 因此,在空的时候,我就将多个服务的管理脚本融合在了一起,将他做成一个工具,这样子就减少了服务管理的杂乱. 废话不说了,下面就是脚本内容,文章结尾我会简单介绍该脚本的思路. #!/bin/bash # # 本脚本用来对系统上的多服务进行管理操作 # 目前仅支持n

centOS 6 服务管理与服务脚本

服务管理与服务脚本 linux服务 服务管理与服务脚本 linux服务 服务启动过程详解 chkconfig命令 非独立服务与xinetd进程 一个特殊的服务脚本 服务启动过程详解 在开机启动过程中,我们计算机的各种服务也会按照配置信息启动服务,那个我们的服务使如何启动的呢?我们以 init 3模式为例,进行说明: 上图中:rc 3 --> 意味着读取/etc/rc.d/rc3.d/下的内容,现在我们看看/etc/rc.d/rc3.d/下有什么东西. 在/etc/rc.d/rc3.d/目录下,我