shell脚本调用.out程序,终端中打开服务

2021/6/4 7:27:46

本文主要是介绍shell脚本调用.out程序,终端中打开服务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

shell脚本调用.out程序,终端中打开服务。

关键命令:

gnome-terminal -x bash -c "./FEPServer.out;exec bash;"
FEPServer.out为要打开的.out程序,也可以是要打开的sh文件。

整体代码如下:

#!/bin/bash
#author:zilong 
#file: caiji_start.sh
#comment: caiji start script.
#histroy:
#	2021-03-30 10:00AM created by Zi Long at Philisense

#初始化参数
#服务名
SERVICE_NAME=(
	FEP
	RTDB
	AlarmServer
	AlarmGraf
)
#服务启动包所在的目录,根据实际地址设置
SERVICE_PATH=(
	/PhiliCube/Application/PhiliFEP
	/PhiliCube/Application/PhiliRTDB
	/PhiliCube/Application/PhiliAlarm
	/PhiliCube/Application/PhiliAlarm
)
#服务启动包
SERVICE_PACKAGE=(
	FEPServer.out
	RTDBServer.out
	AlarmServer.out
	AlarmGraf.out
)


#	脚本提示信息
tips(){
  echo "-------------------------------------"
  echo ""
	echo "Version:1.0"
	echo "Author:zilong"
	echo "Comment:"
	echo "  命令举例:sh caiji_start.sh - status"
	echo "  当前支持如下服务的启动:FEP、RTDB、AlarmServer、AlarmGraf"
  echo "  启动参数:"
  echo "	  -status   -查看平台所有服务运行状态"
  echo "	  -start    -启动平台所有服务"
  echo "	  -stop     -停止平台所有服务"
  echo "	  -restart  -重启平台所有服务"
	echo "	  -fep      -重启采集服务"
	echo "	  -rtdb     -重启实时数据服务"
	echo "	  -alarm    -重启报警服务"
	echo "	  -graf     -重启报警消息服务"
  echo ""
  echo "-------------------------------------"
}

#查看状态
status(){
  echo ""
  echo "---------查看状态 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
		do
			num=$((i+1))
			service_name=${SERVICE_NAME[i]}
			#查找pid之ps方法
			#service_pid=$(ps -ef | grep "$service_name" | grep -v grep | grep -v bash | awk '{print $2}')
			#查找pid之pgrep方法
			service_pid=$(pgrep -f -n "$service_name")
			if [ -z "$service_pid" ]; then
				echo "---	服务$num: 【$service_name】未运行!!!"
			else
				echo "---	服务$num: 【$service_name】【$service_pid】运行中..."
			fi
		done
  echo "---------查看状态 执行完毕 !!!-----------"
  echo ""
}

#一键启动
start()
{
  echo ""
	echo "---------启动程序 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
	do
		num=$((i+1))
		service_name=${SERVICE_NAME[i]}
		service_path=${SERVICE_PATH[i]}
		service_package=${SERVICE_PACKAGE[i]}
		echo "---服务$num:【$service_name】开始启动 ..."
		echo "---	服务目录地址为: $service_path"
		echo "--- 	服务安装程序为: $service_package"
		
		cd "$service_path" || return
    #	path=`pwd`
    # echo "---	当前目录地址为:$path"

		#查找pid之ps方法
		#service_pid=$(ps -ef | grep "$service_name" | grep -v "grep" | grep -v "bash" | awk '{print $2}')
		#查找pid之pgrep方法
		service_pid=$(pgrep "$service_name")
		
			if [ -n "$service_pid" ];then
				echo "--- 	$service_name进程存在,无需启动。当前进程为:$service_pid"
			else
				##启动服务
				echo "--- 	$service_name进程不存在,启动服务 ..."				
				gnome-terminal -x bash -c "./$service_package;exec bash;"				
				
				##睡1秒,等程序反应,否则可能拿不到pid
				sleep 1

				service_pid_new=$(pgrep "$service_name")
				until [ -n "$service_pid_new" ]
					do
					  service_pid_new=$(pgrep "$service_name")
					done
				echo "--- 	$service_name 启动完毕!!!当前进程为:$service_pid_new"
			fi
		sleep 1
	done
  echo "---------启动程序 执行完毕 !!!-----------"
  echo ""
}


#一键停止
stop(){
  echo ""
  echo "---------停止程序 开始执行 ...-----------"
	for((i=0;i<${#SERVICE_NAME[@]};i++))
	do
		num=$((i+1))
	  service_name=${SERVICE_NAME[i]}
	  #查找启动服务的终端 ps
		#service_pid=$(ps -ef | grep "$service_name" | grep "bash" | grep -v "grep" | awk '{print $2}')
		#查找启动服务的终端 grep
		service_pid=$(pgrep -f -n "$service_name")
		if [  -z "$service_pid"  ]; then
			echo "---	服务$num: 【$service_name】进程不存在或已停止运行!!!"
		else
		  echo "---	服务$num: 【$service_name】【$service_pid】运行中..."
		  #关终端进程
      terminal_pid=$(ps -ef | grep "$service_name" | grep "bash" | grep -v "grep" | awk '{print $2}')
      if [  -n "$terminal_pid"  ]; then
        echo "---	服务$num: 【$service_name】【$terminal_pid】存在窗口"
        kill -9 "$terminal_pid"
			  echo "---	服务$num: 【$service_name】窗口停止成功。"
      fi
		  #关服务进程
			kill -9 "$service_pid"
			echo "---	服务$num: 【$service_name】【$service_pid】服务停止成功。"
		fi

		sleep 1
	done
  echo "---------停止程序 执行完毕 !!!-----------"
  echo ""
}

##一键重启
restart(){
  echo ""
  echo "---------重启 开始执行 ...-----------"
	stop
	sleep 1
	start
	sleep 1
	status
  echo "---------重启 执行完毕 !!!-----------"
  echo ""
}

#重启某服务处理函数
reservice(){
	echo "---	获取参数 ..."
	service_name=$1
	service_path=$2
	service_package=$3
	echo "---	服务名称为:	【$service_name】"
	echo "---	服务目录地址为:$service_path"
	echo "---	服务安装程序为:$service_package"
  #到启动程序目录
	cd "$service_path" || return
#	path=`pwd`
# echo "---	当前目录地址为:$path"

	#检查服务是否存在进程,有则杀掉
	pid=$(pgrep -f -o "$service_name")
	if [  -n "$pid"  ]; then
	  echo "---	服务进程存在,pid=[$pid]关闭当前进程 ..."
		kill -9 "$pid"
		echo "---	清理进程后,启动 ..."
	else
		echo "---	服务进程不存在 ..."
	fi
	#重启
	gnome-terminal -x bash -c "./$service_package;exec bash;"
	sleep 1
	service_pid_new=$(pgrep -f -n "$service_name")
	until [ -n "$service_pid_new" ]
		do
		  service_pid_new=$(pgrep -f -n "$service_name")
		done
	echo "---	服务已启动,当前进程为:$service_pid_new"
}

#采集服务	FEP
fep(){
  echo ""
  echo "---------采集服务 程序开始执行 ... -----------"
	service_name=${SERVICE_NAME[0]}
	service_path=${SERVICE_PATH[0]}
	service_package=${SERVICE_PACKAGE[0]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------采集服务 程序执行完毕 !!!-----------"
  echo ""
}

#实时数据服务	RTDB
rtdb(){
  echo ""
  echo "---------实时数据服务 程序开始执行 ... -----------"
  service_name=${SERVICE_NAME[1]}
	service_path=${SERVICE_PATH[1]}
	service_package=${SERVICE_PACKAGE[1]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------实时数据服务 程序执行完毕 !!!-----------"
  echo ""
}

#报警服务	AlarmServer
alarm(){
  echo ""
  echo "---------报警服务 程序开始执行 ... -----------"
  service_name=${SERVICE_NAME[2]}
	service_path=${SERVICE_PATH[2]}
	service_package=${SERVICE_PACKAGE[2]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------报警服务 程序执行完毕 !!!-----------"
  echo ""
}

#报警消息服务	AlarmGraf
graf(){
  echo ""
  echo "---------报警服务 程序开始执行 ... -----------"
  service_name=${SERVICE_NAME[3]}
	service_path=${SERVICE_PATH[3]}
	service_package=${SERVICE_PACKAGE[3]}
	reservice "$service_name" "$service_path" "$service_package"
  echo "---------报警服务 程序执行完毕 !!!-----------"
  echo ""
}

##终端输入参数调用
case "$1" in
	"-status")
     status
     ;;
    "-start")
     start
     ;;
    "-stop")
     stop
     ;;
    "-restart")
     restart
     ;;
	"-fep")
     fep
     ;;
	 "-rtdb")
     rtdb
     ;;
	"-alarm")
     alarm
     ;;
  "-graf")
     graf
     ;;
    *)
     tips
     ;;
esac    
exit 0

 



这篇关于shell脚本调用.out程序,终端中打开服务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程