热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开启批量自启jar包程序(springboot)(crontab和rc.local运行java程序注意环境变量)

开启批量自启jar包程序脚本:#!binsh#echodate%F-%Ttest.txtexportJAVA_HOMEoptJavajdk1.8.0_65e

开启批量自启jar包程序

脚本:

#!/bin/sh#echo `date +%F-%T` > /test.txt
export JAVA_HOME=/opt/Java/jdk1.8.0_65
export JRE_HOME=${JAVA_HOME}/jre
#要加环境变量 并且让其生效!!! 原先是没有开头这几句的环境变量的。
source /etc/profile# 端口号
PORTS=(8848 9999 3000 4000 18001 18002 18003 18005 18007 18008 18012 18020 6666)
# 模块
MODULES=(okay-register okay-gateway okay-auth okay-upms-biz cdnaturemms-portal cdnaturemms-dr cdnaturemms-cp cdnaturemms-subsys ticket-pc ticket-mobile ticket-web guide-pc bsp-pay-platform)
# 模块名称
MODULE_NAMES=(注册中心 网关 AUTH UPMS cdnaturemms-portal cdnaturemms-dr cdnaturemms-cp cdnaturemms-subsys ticket-pc ticket-mobile ticket-web guide-pc bsp-pay-platform)
# jar包数组
JARS=(okay-register.jar okay-gateway.jar okay-auth.jar okay-upms-biz.jar cdnaturemms-portal.jar cdnaturemms-dr.jar cdnaturemms-cp.jar cdnaturemms-subsys.jar ticket-pc.jar ticket-mobile.jar ticket-web.jar guide-pc.jar bsp-pay-platform.jar)
# jar包路径
JAR_PATH='/opt/Applications/api'
# 日志路径
LOG_PATH='/opt/Applications/api/logs'
start() {local MODULE&#61;local MODULE_NAME&#61;local JAR_NAME&#61;local command&#61;"$1"local commandOk&#61;0local count&#61;0local okCount&#61;0local port&#61;0for((i&#61;0;i<${#MODULES[&#64;]};i&#43;&#43;))doMODULE&#61;${MODULES[$i]}MODULE_NAME&#61;${MODULE_NAMES[$i]}JAR_NAME&#61;${JARS[$i]}PORT&#61;${PORTS[$i]}if [ "$command" &#61;&#61; "all" ] || [ "$command" &#61;&#61; "$MODULE" ];thencommandOk&#61;1count&#61;0PID&#61;&#96;pgrep -f "$JAR_NAME"&#96;#PID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;if [ -n "$PID" ];thenecho "$MODULE---$MODULE_NAME:已经运行,PID&#61;$PID"elseexec nohup java -Xms256m -Xmx512m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 &sleep 25sPID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;while [ -z "$PID" ]doif (($count &#61;&#61; 30));thenecho "$MODULE---$MODULE_NAME:$(expr $count \* 25)秒内未启动,请检查!"breakficount&#61;$(($count&#43;1))echo "$MODULE_NAME启动中.................."sleep 25sPID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;doneokCount&#61;$(($okCount&#43;1))echo "$MODULE---$MODULE_NAME:已经启动成功,PID&#61;$PID"fifidoneif(($commandOk &#61;&#61; 0));thenecho "第二个参数输入错误"elseecho "............本次共启动:$okCount个服务..........."fi
}stop() {local MODULE&#61;local MODULE_NAME&#61;local JAR_NAME&#61;local command&#61;"$1"local commandOk&#61;0local okCount&#61;0for((i&#61;0;i<${#MODULES[&#64;]};i&#43;&#43;))doMODULE&#61;${MODULES[$i]}MODULE_NAME&#61;${MODULE_NAMES[$i]}JAR_NAME&#61;${JARS[$i]}if [ "$command" &#61; "all" ] || [ "$command" &#61; "$MODULE" ];thencommandOk&#61;1PID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;if [ -n "$PID" ];thenecho "$MODULE---$MODULE_NAME:准备结束,PID&#61;$PID"kill -9 $PIDPID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;while [ -n "$PID" ]dosleep 3sPID&#61;&#96;ps -ef |grep $(echo $JAR_NAME | awk -F/ &#39;{print $NF}&#39;) | grep -v grep | awk &#39;{print $2}&#39;&#96;doneecho "$MODULE---$MODULE_NAME:成功结束"okCount&#61;$(($okCount&#43;1))elseecho "$MODULE---$MODULE_NAME:未运行"fifidoneif (($commandOk &#61;&#61; 0));thenecho "第二个参数输入错误"elseecho "............本次共停止:$okCount个服务............"fi
}case "$1" instart)start "$2";;stop)stop "$2";;restart)stop "$2"sleep 3sstart "$2";;*)echo "第一个参数请输入:start|stop|restart"exit 1;;
esac

对应的jar包:

[root&#64;OkayGis-20139 api]# ls
bjmms-cp-18003.out bsp-pay-platform-6666.out cdnaturemms-portal-18001.out hs_err_pid28087.log okay-gateway-9999.out okay-upms-biz.jar ticket-pc.jar
bjmms-cp.jar bsp-pay-platform.jar cdnaturemms-portal.jar logs okay-gateway.jar StartapiJar.sh ticket-web.jar
bjmms-dr-18002.out cdnaturemms-cp-18003.out cdnaturemms-subsys-18005.out oa-web-18004.out okay-register-8848.out StartapiJar.sh.bak
bjmms-dr.jar cdnaturemms-cp.jar cdnaturemms-subsys.jar oa-web.jar okay-register.jar ticket-mobile-18008.out
bjmms-portal-18001.out cdnaturemms-dr-18002.out guide-pc-18020.out okay-auth-3000.out okay-upms-4000.out ticket-mobile.jar
bjmms-portal.jar cdnaturemms-dr.jar guide-pc.jar okay-auth.jar okay-upms-biz-111.jar ticket-pc-18007.out
[root&#64;OkayGis-20139 api]# pwd
/opt/Applications/api

对应的log文件&#xff1a;

[root&#64;OkayGis-20139 logs]# ls
bjmms-cp bsp-pay-platform.out cdnaturemms-dr.log cdnaturemms-subsys guide-pc.log okay-gateway.log ticket-mobile ticket-pc.out
bjmms-dr cdnaturemms-cp cdnaturemms-dr.out cdnaturemms-subsys.log guide-pc.out okay-register.log ticket-mobile.log ticket-web
bjmms-portal cdnaturemms-cp.log cdnaturemms-portal cdnaturemms-subsys.out oa-web okay-register.out ticket-mobile.out ticket-web.log
bsp-pay-platform cdnaturemms-cp.out cdnaturemms-portal.log dyms-dr-18002.out okay-auth okay-upms-biz ticket-pc ticket-web.out
bsp-pay-platform.log cdnaturemms-dr cdnaturemms-portal.out guide-pc okay-auth.log okay-upms-biz.log ticket-pc.log work

corntab -l

[root&#64;OkayGis-20139 api]# crontab -l
&#64;reboot /opt/Applications/api/StartapiJar.sh start all >>/opt/2021-1812nohup.out 2>&1

遇到的坑&#xff1a;&#xff08;crontab 和 rc.local运行java程序注意环境变量&#xff01;&#xff09;

开始讲故事 / 排错过程 &#xff1a;
手动运行StartapiJar.sh 脚本是正常的。 sh StartapiJar.sh start all
在这里插入图片描述
但是将脚本放到 rc.local 和 crontab后&#xff0c;运行结果异常&#xff0c;一直卡在“注册中心启动中”
在这里插入图片描述
开set -x 排错。 看样子是没获取到PID &#xff0c;导致一直循环&#xff0c;在外面 ps -ef | grep java结果是空的。那估计问题出在java -jar xxx.jar上。
开始还以为是给的sleep秒数太少。
在这里插入图片描述
查看jar包生成的日志&#xff1a;发现这个错误&#xff1a;nohup: failed to run command ‘java’ no such file or directory

cat okay-register.log

在这里插入图片描述

马龙帅的指导 pgrep &#xff1a;

pgrep命令以名称为依据从运行进程队列中查找进程&#xff0c;并显示查找到的进程id。每一个进程ID以一个十进制数表示&#xff0c;通过一个分割字符串和下一个ID分开&#xff0c;默认的分割字符串是一个新行。对于每个属性选项&#xff0c;用户可以在命令行上指定一个以逗号分割的可能值的集合。
#这样上面的PID获取就不用写一长串的东西了。
pgrep -f "$JAR_NAME"

在这里插入图片描述

参考&#xff1a;
在这里插入图片描述

https://www.cnblogs.com/zhucezmf/p/10459081.html
https://blog.csdn.net/Nightwish5/article/details/117066081
https://blog.csdn.net/weixin_38169722/article/details/101771446


推荐阅读
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文回顾了3.21开学以来的学习情况,包括javaWeb课程的迷糊感和未预习导致的不知所措,以及对VOJ题目的归类和解答。午饭前完成了阶乘相关的两道题目。下午的数据结构课听懂了队列的讲解,但有几个疑问未能及时复习。设计模式课程因预习效率低而感到困惑,同时也没搞清楚下节课的内容。晚上去图书馆学习。通过反思和总结,对自己的学习收获有了更深刻的认识。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
author-avatar
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有