Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本

linux开机自启

背景

目前要部署一个spring boot框架的jar包,实现开机启动项目或者应用挂掉了 执行启动脚本
在root目录下有一个启动项目的脚本: app_start.sh
app_start.sh 里面内容是:

nohup java -jar xxx.jar>/dev/null 2>&1 & 

linux执行 sh /root/app_start.sh 可以后台启动xxx.jar应用

一、开机自定义执行命令(脚本)(/etc/rc.d/rc.local)

简介

/etc/rc.d/rc.local 用于添加开机启动命令 /etc/rc.local是/etc/rc.d/rc.local的软连接 软连接相当于windows的快捷键 

下图是linux服务器的启动流程,由此可知/etc/rc.d/rc.local文件是开机的时候会执行
image

配置开机执行

第一步:/etc/rc.local文件添加启动命令

vi /etc/rc.local 

image

第二步:设置/etc/rc.d/rc.local 文件的可执行权限(重要)

文件不设置可执行权限,第一步配置的启动命令不会执行;

chmod +x /etc/rc.d/rc.local 

第三步:重启服务器;查看应用是否启动成功

reboot 

二、定时任务crontab

简介

Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

1、cron是服务名称;
2、crond是后台进程;
3、crontab是计划任务表;

由上面的简介就知道crontab,是linux系统开机默认会启动的定时任务,并且每分锺会定期检查是否有要执行的工作;
这样我们就能定时的执行一个脚本,每10分钟、每半个小时的执行一次脚本;

开机自启&判断应用没启动,执行启动脚本

我们可以每10分钟、每半个小时 执行一次启动脚本的命令(命令如下),来保证应用始终是启动的,当然第一次 执行命令应用启动完成了,后面在执行启动命令的时候 报端口占用的异常,但是不影响已经启动的应用,所以也能满足了开机自启的需求。

sh /root/app_start.sh 

基于此我们可以写一个判断脚本,判断 自启应用的端口是否被占用了,端口没被占用才执行启动脚本,避免无效的执行 启动应用脚本命令(sh /root/app_start.sh )

假如启动应用脚本命令(sh /root/app_start.sh )的应用端口是 9999,那么可以有一个/root/task_start.sh的脚本
/root/task_start.sh 脚本命令如下:

#!/bin/sh tomcat=`netstat -an | grep ":9999" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` if [ $tomcat -eq 0 ];then #如果端口没有占用的话要怎么怎么样 sh /root/app_start.sh fi 

这样就根据业务需求 每10分钟、半个小时执行一次命令 sh /root/task_start.sh
来判断应用的端口如果没有被占用,端口不存在说明应用没有运行,执行启动项目的命令(sh /root/app_start.sh )

crontab 添加周期性执行脚本

crontab命令

crontab [-u username] //省略用户表表示操作当前用户的crontab -e (编辑工作表) -l (列出工作表里的命令) 

crontab时间格式实例

  • 每分钟执行一次
* * * * * sh /root/task_start.sh 
  • 每10分钟执行一次
*/10 * * * * sh /root/task_start.sh 
  • 每个小时执行一次
0 */1 * * * sh /root/task_start.sh 

编辑周期性执行脚本

新增 每10分钟执行启动脚本

crontab -e 

image

验证定时任务 是否新增完成

  • crontab -l 命令
    image

  • Linux 查看定时器Crontab日志
    查看命令如下

tail -f /var/log/cron 

最后验证应用是否自启

首先:可以手动关闭应用,10分钟后看应用是否还在启用中(首次验证可以把定时任务改成每分钟执行,来快速验证一下)
最后:重启服务器,查看应用是否在运行
reboot 

完毕~

本网页由快兔兔AI采集器生成,目的为演示采集效果,若侵权请及时联系删除。

原文链接:https://www.cnblogs.com/x-kq/p/16015252.html

更多内容