编写shell脚本让springboot项目在CentOS中开机自启动
springboot
项目部署在CentOS
系统上时,如果遇到停电关机,公司的实施人员就得跑到甲方现场重新启动项目并测试,很是麻烦,这里探讨如何编写shell
脚本控制springboot
项目开机时自动启动;
不正之处,请不吝赐教!
以eureka
的jar
包为例子:
上传Jar包
将eureka
的jar
包上传至/usr/local/eureka
目录下:
编写shell启动脚本
进入/usr/local/eureka
目录,执行以下命令,创建并编辑eureka.sh
启动脚本:
vi eureka.sh
内容如下,其中APP_PATH
为jar
包所在目录, APP_NAME
为jar
包的位置,JAVA_JDK
为jdk
的安装目录,LOG_NAME
为jar
包启动后日志输出位置,其他地方不需要修改:
#!/bin/bash
#自定义内容
APP_PATH=/usr/local/eureka
APP_NAME=/usr/local/eureka/eureka-server-1.0.0.jar
JAVA_JDK=/usr/local/jre1.8.0_202
LOG_NAME=/usr/local/eureka/eurekaLog.log
#执行命令有误时,提示使用说明参数
usage() {
echo "Usage: sh eureka.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否已经在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
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_JDK/bin/java -Duser.dir=$APP_PATH -jar $APP_NAME > $LOG_NAME 2>&1 &
fi
}
#停止服务
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
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
编写完保存并退出,执行以下命令启动eureka
服务,测试启动脚本是否正常:
#故意执行不完整的命令,测试是否提示使用说明
sh eureka.sh
#启动服务
sh eureka.sh start
#查看服务状态
sh eureka.sh status
#停止服务
sh eureka.sh stop
#重启服务
sh eureka.sh restart
测试无误后,停止服务,执行以下命令,设置eureka
脚本的可执行权限:
chmod a+wrx -R eureka
执行完之后,文件名称变绿色:
编写开机自启动配置
执行以下命令,在/usr/lib/systemd/system
目录下创建并编辑eureka.service
配置文件:
vi /usr/lib/systemd/system/eureka.service
内容如下:
其中ExecStart
定义了启动进程时要执行的命令,ExecReload
定义重启服务时要执行的命令,ExecStop
定义停止进程时要执行的名称,这些命令统统指向刚刚创建并测试通过的eureka.sh
启动脚本;
[Unit]
Description=eureka
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/eureka/eureka.sh start
ExecReload=/usr/local/eureka/eureka.sh restart
ExecStop=/usr/local/eureka/eureka.sh stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
编写完保存并退出,通过systemctl
命令启动eureka
服务,测试启动脚本是否正常:
#查看运行状态
systemctl status eureka
#启动
systemctl start eureka
#关闭
systemctl stop eureka
#重启
systemctl restart eureka
#查看配置文件内容
systemctl cat eureka
启动完之后,默认是没有启动开机自启动的;
通过以下命令设置开机自启动:
systemctl enable eureka
测试完成后关闭服务器重启,模拟断电后重启服务器,查看开机后是否自动启动:
编写shell脚本让springboot项目在CentOS中开机自启动的更多相关文章
- shell脚本运行springboot项目jar包
#!/bin/bash APP_NAME=AutomationGuide-0.0.1-SNAPSHOT.jar #使用说明,用来提示输入参数 usage() { echo "please e ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- CentOS下编写shell脚本来监控MySQL主从复制的教程
这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下 目的:定时监控MySQL主从数据库是否同步,如果不同步 ...
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- linux下使用shell脚本自动化部署项目
在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...
- 编写shell脚本遇到的问题
运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...
- 在windows下编写shell脚本
注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...
- python编写shell脚本详细讲解
python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...
- [转帖]编写shell脚本所需的语法和示例
编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...
随机推荐
- Django简单的使用及一些基础方法
目录 一.静态文件配置 1. 什么是静态文件 2. 静态文件的用法 3. 静态文件的动态绑定 二.请求方式与相应 1. get请求 2. post请求 3. Django后端视图函数处理请求 三.re ...
- ValidationUtils 验证工具
package com.appnirman.vaidationutils;import android.content.Context;import java.util.regex.Matcher;i ...
- ADT基础(一)—— List,Stack,and Queue
ADT基础(一)-- List,Stack,and Queue 1 List 表示 数组:易于search,难于insert和remove 链表:难于search,易于insert和remove // ...
- LeetCode-133克隆图(图的遍历+深拷贝概念)
克隆图 LeetCode-133 使用一个map来存储已经遍历的结点,这个存起来的结点必须是新new的才符合题意 /* // Definition for a Node. class Node { p ...
- python学习总结篇(2)——函数
如其他语言一样,除了基本知识外,另外一个重要的板块就是函数了,python中也有函数. 在python中,函数的定义方式为: def 函数名( ): 下面通过几个简单的例子,看看python中的函 ...
- 订单退款&重复支付需求疑问点归纳整理
更新历史记录: 更新内容 更新人 更新时间 新建 Young 2020.12.10 16:45 更新产品疑问解答 Young 2020.12.11 10:14 更新退款权益终止时间 Young 2 ...
- Python:垃圾回收
有很多不同的方法来实现垃圾回收,例如跟踪,引用计数,转义分析,时间戳和心跳信号等.不同的语言依赖于不同的垃圾回收实现,例如,有些将其与编译器和运行时系统集成在一起.而其他语言则可能需要事后设置,甚至可 ...
- python基础学习之集合set
.集合:set 特点:无序,不可重复(自动去重),可更改,可以与元组.列表互相转换 格式:s = {'x','y','z'} 转换:(转回用set) s = {'x','y','z'} ...
- HDU_3949 XOR 【线性基】
一.题目 XOR 二.分析 给定$N$个数,问它的任意子集异或产生的数进行排列,求第K小的数. 构造出线性基$B$后,如果$|B| < N$,那么代表N个数中有一个数是可以由线性基中的其他数异或 ...
- 如何让python脚本支持命令行参数--getopt和click模块
一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...