媒体电商概念教程推广优化网站排名
web/
2025/9/29 22:47:32/
文章来源:
媒体电商概念,教程推广优化网站排名,成都公司网页制作公司,无锡个人网站制作最近在做Linux 环境下的一个运行管理通用脚本#xff0c;用来管理我的Java 小程序启动、停止等操作。虽说这些可以用手敲命令的方式实现#xff0c;也不复杂#xff0c;但程序员么#xff0c;不就喜欢封装点代码#xff0c;减少操作啥的。先讲下脚本的主要逻辑#xff0c…最近在做Linux 环境下的一个运行管理通用脚本用来管理我的Java 小程序启动、停止等操作。虽说这些可以用手敲命令的方式实现也不复杂但程序员么不就喜欢封装点代码减少操作啥的。先讲下脚本的主要逻辑提供六个方法包括usage、is_exist、start、stop、status、restart它们的作用都体现在方法名上。脚本接受两个参数第一个是待执行的程序名比如我想执行springboot.jar那参数直接就输入它 第二个是待执行的操作脚本提供了四个固定操作包括start、stop、status、restart。使用示例如下#启动. 执行脚本.sh 程序完整名称 start#停止. 执行脚本.sh 程序完整名称 stop#重启. 执行脚本.sh 程序完整名称 restart#查看运行状态sh 执行脚本.sh 程序完整名称 status完整代码如下#!/bin/bash#本脚本基本无需改动注意要点均已用中文说明#建议使用 . xx.sh 命令执行脚本。如果使用sh xx.sh执行注意is_exist方法里的注释#获取脚本名称SCRIPT$0#获取进程名称必须为完整程序名否则可能会误操作其他进程APP_NAME$1#获取操作符OPERATOR$2usage() {echo Usage: sh $SCRIPT [app_name] [start|stop|restart|status]exit 1}#判断是否输入了两个参数#注意①if [ $# ! 2 ]; thenusagefiis_exist(){#过滤grep命令本身#注意②pidps -ef|grep $APP_NAME|grep -v grep|awk {print $2} #使用sh xx.sh命令执行的话启用下面代码#pidps -ef|grep $APP_NAME|grep -v grep|grep -v $SCRIPT|awk {print $2} if [ -z ${pid} ]; thenreturn 1elsereturn 0fi}start(){is_existif [ $? -eq 0 ]; thenecho ${APP_NAME} is already running. pid${pid} .elsenohup java -jar $APP_NAME /dev/null 21 }stop(){is_existif [ $? -eq 0 ]; thenkill -9 $pidelseecho ${APP_NAME} is not runningfi}status(){is_existif [ $? -eq 0 ]; thenecho ${APP_NAME} is running. Pid is ${pid}elseecho ${APP_NAME} is NOT running.fi}restart(){stopstart}case $OPERATOR instart)start ;;stop)stop ;;status)status ;;restart)restart ;;*)usage ;;esac在写脚本的过程中有两个问题值得记录下来分别是注意①和注意②。注意①的问题是我一开始判断条件写成if [ $? -eq 0 ] then执行脚本的时候提示错误: syntax error near unexpected token fi。这是由于我漏掉了一个符号;正确的判断条件为if [ $? -eq 0 ]; then。不过如果then是另起一行则不需要加:我这为了结构紧凑些就放在一行了。其他诸如syntax error near unexpected token else的问题也多是这个原因导致的。注意②的问题是跟shell执行机制有关。一般执行脚本有两种方式. test.sh和sh .test.sh先分别说下区别。. test.sh是在当前shell里执行test.sh里的命令会根据脚本开头的#!bin/bash找到对应解释器执行这里就一个进程在执行命令。sh test.sh是新建一个shell再执行test.sh里命令这意味着开启两个进程在运行一个是新建执行shell一个是执行脚本里的代码。我最初获取进程pid的命令是pidps -ef|grep $APP_NAME|grep -v grep|awk {print $2},这句话平日里单独执行时从未出错所以这次我在shell脚本里也这样写。但在执行sh 执行脚本.sh 程序完整名称 status命令的时候出了问题我随便输入程序名即使是不存在的它都会提示程序在运行并给出pid。于是我将获取pid的命令改为pidps -ef|grep $APP_NAME查看究竟是哪些进程再次执行脚本后发现了问题看下图。[图片上传中。。。(1)] 它将sh test.sh test也查找出来了而这不是我们需要的应该将它排除掉只获取真正执行程序的那个进程于是获取实际pid的命令改为pidps -ef|grep $APP_NAME|grep -v grep|grep -v $SCRIPT|awk {print $2}最后一个grep -v $SCRIPT即表示排除脚本自身。使用. test.sh方式执行就不需要这样做了会报错的因为它不存在这个进程。参考资料
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84119.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!