ubuntu下 设置开机自启脚本,启动java程序,并且作为守护进程检测java程序的运行状态,如果应用进程被杀掉,自动重启
- java程序是jar包启动,读取jar包外部配置文件,需要先写一个外部的配置文件,然后再写一个java 程序启动脚本
外部配置文件 application.properties
server.port=8001
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
- 写启动java 程序脚本 start.sh
#!/bin/bash
nohup java -jar /home/yanrangnan/code/factoryInfo/factoryInfo-0.0.1-SNAPSHOT.jar -Dspring.config.location=/home/yanrangnan/code/factoryInfo/application.properties > /dev/null 2>&1 &
如果有需要可以将日志输出到某个文件 只需要把
/dev/null 改成想要输出的文件即可
- 写守护进程脚本,两个功能,
一, 可以监控 java factoryInfo应用进程是否还存活,
二,当检测的factoryInfo 进程死掉后,重启该进程
脚本如下:
#!/bin/sh
FILE_DIR=/home/yanrangnan/code/factoryInfo
rm -rf ${FILE_DIR}/daemon.log
touch ${FILE_DIR}/daemon.log
chmod 777 ${FILE_DIR}/daemon.log
while true
do
# 查找某个进程是否还活着
COUNT=$(ps -ef |grep factoryInfo-0.0.1-SNAPSHOT.jar |grep -v "grep" |wc -l)
if [ "$COUNT" -eq 0 ]
then
# 如果死掉就重启应用,修改成自己的启动应用脚本或命令,这里就启动上面写的start.sh
${FILE_DIR}/start.sh
date >> ${FILE_DIR}/daemon.log
echo "starting........" >> ${FILE_DIR}/daemon.log
else
date >> ${FILE_DIR}/daemon.log
echo "process already started!" >> ${FILE_DIR}/daemon.log
fi
# 每隔60秒检查一次,并且将daemon.log的日志清理一波,减少没用的日志存在
# daemon.log 就是当出现问题的时候可以检查一下守护进程有没有正常工作
sleep 60
echo "sleep" > ${FILE_DIR}/daemon.log
done
4 . 修改/etc/rc.local,设置开机启动守护进程daemon.sh
添加要启动的脚本
eg:
/home/yanrangnan/code/factoryInfo/daemon.sh
[注意] 有的版本 修改rc.local 无效
原因从 Ubuntu 6.10开始,Ubuntu就将先前默认的bash shell 更换成了dash
通过#ls -al /bin/sh 查看
如果看到了 /bin/sh -> dash
那么就需要修改试一下,将dash
将默认的shell改成bash的方法:
扫描二维码关注公众号,回复:
15178682 查看本文章
方法1:在终端执行 sudo dpkg-reconfigure dash ,然后选择 no.
方法2:重新进行软链接:
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
这个时候开启就会自动启动/home/yanrangnan/code/factoryInfo/daemon.sh这个脚本