目录

  • 1.场景说明
  • 2.开始操作
  • 2.1.前置操作
  • 1、服务器BIOS配置来电开机
  • 2、虚拟机配置来电开机
  • 2.2.虚拟机/物理机配置
  • 1、环境准备
  • 2、修改脚本
  • 3、注册服务
  • 3.总结

1.场景说明

公司机房老是停电,一停电几十个程序和其使用的中间件、数据库等都需要启动,把程序做成开机启动势在必行!!!
服务器的操作系统是CentoOS 7.6,程序是springboot框架打包成的jar包,利用chkconfig命令来做开机启动。

2.开始操作

2.1.前置操作

1、服务器BIOS配置来电开机

服务器一般默认来电开机是开启的,但是不排除关闭的情况和一些其他异常情况(文中会讲到一种异常情况),具体操作可以参考其他大神的文章。

2、虚拟机配置来电开机

如果服务器是单纯的物理机,就跳过这一步了。如果服务器是装成了ESXi或是其他虚拟系统,就需要把其中的虚拟机都做成开机启动,这一步也参考其他大神的文章。

2.2.虚拟机/物理机配置

1、环境准备

启动脚本:data.jar

程序本体:start.sh

centos pkg centos pkgconfig_jar包

2、修改脚本

先来查看下脚本本体内容:

#!/bin/sh
# jar包路径
APP1_NAME=/home/data/data.jar
# 查询是否有原进程
tpid1=`ps -ef|grep $APP1_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
# 如果此进程已经启动,则先杀掉
if [ $tpid1 ]; then
kill -9 $tpid1
fi
# 启动项目jar包
nohup java -jar $APP1_NAME > nohup.log 2>&1 &

由此看来脚本只是一个简简单单的重启脚本,想要通过chkconfig来管理就需要加上两行代码和修改一行代码,脚本配置如下:

#!/bin/sh
# chkconfig: 2345 80 90
# description: 这是某个程序的启动脚本
# jar包路径
APP1_NAME=/home/data/data.jar
# 查询是否有原进程
tpid1=`ps -ef|grep $APP1_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
# 如果此进程已经启动,则先杀掉
if [ $tpid1 ]; then
kill -9 $tpid1
fi
# 启动项目jar包,java命令写成了绝对路径,因为系统启动的时候是不识别环境变量的
# 日志文件也写成了绝对路径,不然日志会输出在init.d目录
nohup /home/jdk1.8.0_251/bin/java -jar $APP1_NAME > /home/data/nohup.log 2>&1 &

description就不说了,就是让写下描述。我们来说下chkconfig的参数,首先2345代表操作系统等级,具体如下:

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

80代表的是启动优先级,顾名思义就是操作系统启动以后,排在什么顺序启动,因为操作系统也是需要一个一个按顺序将程序进行启动的。
90代表的是停止优先级,和启动优先级类似,就是系统关机时排在什么顺序停止。
优先级范围是0-100,数字越大,优先级越低。
需要注意的是我们启动的程序可能会依赖其他的程序,比如数据库、redis等等之类的程序,所以要把程序启动优先级调整在一个合适的位置。

# 假如mysql的配置是
# chkconfig: 2345 36 50
# jar包启动配置是
# chkconfig: 2345 35 5
# 那么jar包会比mysql先启动,导致连不上数据库,最终启动失败。
3、注册服务

将脚本复制到/etc/rc.d/init.d目录下

# 这里复制到目标路径以后去掉了后缀方便使用
cp start.sh /etc/rc.d/init.d/start
# 注册服务
chkconfig --add start 
# 开机启动
chkconfig start on
# 检查启动项
chkconfig --list

centos pkg centos pkgconfig_jar_02


看到启动项已经配置好了,可以重启服务器看下效果

centos pkg centos pkgconfig_jar_03

3.总结

1、开机启动程序需要注意数据库和其他中间件的chkconfig的配置,尽量靠后启动,至少要比其依赖的软件靠后;
2、由于chkconfig启动项不会读取环境变量,所以启动该程序的java命令要写成绝对路径;

更新时间:2020年12月21日16:11:12

从一个菜鸟进阶成一个老菜鸟