如何用Xshell在Linux下编写启停脚本【一】------- 单个项目的启停脚本
我们作为码农,在Linux环境部署项目是家常便饭的事儿,因此我们也时常需要自己来手动写一些小的启动/停止/重启脚本;接下来我简单为大家讲解下shell脚本,大家若有任何不懂之处,欢迎留言,有不妥之处,也欢迎点评指正。
Shell Script 简介:
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
shell和shell脚本有什么区别?
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
shell脚本:打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。
#!/bin/bash "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
echo "Hello World !" echo命令用于向窗口输出文本。
脚本写法一:
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=/usr/software/lin/project/stopcar/server-eureka-1.0.0.jar
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_NAME >> nohup.out 2>&1 &
echo "...start OK!"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "...stop OK!"
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
用脚本一写的启动成功,案例:
脚本写法二:
#!/bin/bash
source /etc/profile
# chkconfig: - 57 75
# description: server-eureka# Check that networking is up.
[[ ${NETWORKING} = "no" ]] && exit 1start() {
echo "Starting server-eureka ..."
nohup java -jar -Xss768K -Xms1536m -Xmx1536m -Xmn1068m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 /home/park/server-eureka/server-eureka-1.0.0.jar &
#echo 3 >> /tmp/sunyu.txt
}stop() {
echo "Stopping server-eureka ..."
kill -9 $(ps -ef | grep server-eureka-1.0.0 | grep -v grep | awk '{print $2}')
#echo 2 >> /tmp/sunyu.txt
}# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|force-reload}"
exit 2
esac
脚本文件编写好了,首先得给我们的脚本文件通过命令【chmod 700 文件名】授予权限,权限授权成功则为绿色,否则白色,只有授权成功的文件,后续才可执行成功。
只需要执行命令【./脚本文件名.sh start】,则会自动生成【nohup.out】日志文件
输入命令【ps -ef|grep eureka】可以通过端口号查看是否 启动成功
输入命令【cat nohup.out】即可查看启动日志
以上的脚本写法一和脚本写法二是专门针对单个项目的启停。