Linux环境下Jar包自启
前期准备 查看自己服务器java的版本号
输入 java -version
注意: 此处服务器为java11版本的 下面jarSysInit.sh脚本里的jdk环境就要改为对应的环境
1.新建jar包自启脚本
sudo vi /etc/init.d/jarSysInit.sh
按i键进入编辑模式 输入以下内容:
# !/bin/bash
## JDK start 配置自己服务器的JDK环境(jkd8还是11)
export JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
## JDK end
# 有多少个jar就后面加上去就好(这里需要参考自己jenkins的启动脚本 注意全局变量$APP_PATH 要换成jar包对应的全路径)
nohup java -Xms1024m -Xmx1024m -jar /home/admin/apps/typing_provider.jar > /home/admin/apps/typing.log 2>&1 &
按esc键退出编辑模式 输入:wq保存
2.编辑服务器开机时自动执行的文件
sudo vi /etc/rc.d/rc.local
按i键进入编辑模式
在 此文件的touch /var/lock/subsys/local底下
添加以下内容:
#开机启动jar脚本
/etc/init.d/jarSysInit.shi
按esc键退出编辑模式 输入:wq保存
3.提升权限 两个脚本文件都是绿色
sudo chmod 755 /etc/rc.local
sudo chmod 755 /etc/init.d/jarSysInit.sh
4.总结+改善
总结:以上方式就是在虚机开机时,会自动执行系统的加载文件(/etc/rc.d/rc.local),在这个文件里边,加上我们需要自启的Jar包(都写在这里 /etc/init.d/jarSysInit.sh)。但是这种方式会出现一个问题,那就是开启自启的Jar包是root权限,admin用户杀不掉。
解决办法:再添加一个文件,让系统的加载文件(/etc/rc.d/rc.local)执行降权的文件A,让降权文件A执行去执行启动Jar包的脚本(/etc/init.d/jarSysInit.sh)
A文件里边的内容:
#!/usr/bin/expect
set timeout 1
spawn su admin -c "/etc/init.d/jarSyslnit.sh"
expect "password: "
send "admin\r"
interact
exit
~
使用expect命令,需要安装插件
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
自动输入密码的功能,需要用到expect
先安装
sudo yum install -y expect
expect中最关键的四个命令是send,expect,spawn,interact。
send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互
- 点赞
- 收藏
- 关注作者
评论(0)