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文件是开机的时候会执行

配置开机执行
第一步:/etc/rc.local文件添加启动命令
vi /etc/rc.local

第二步:设置/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

验证定时任务 是否新增完成
crontab -l 命令

Linux 查看定时器Crontab日志
查看命令如下
tail -f /var/log/cron
最后验证应用是否自启
首先:可以手动关闭应用,10分钟后看应用是否还在启用中(首次验证可以把定时任务改成每分钟执行,来快速验证一下)
最后:重启服务器,查看应用是否在运行
reboot
完毕~
Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本的更多相关文章
- linux上使用netstat查看当前服务和监听端口
netstat这个命令常用在网络监控方面.利用这个命令,可以查看当前系统监听的服务和已经建立的服务,以及相应的端口.协议等信息. netstat参数说明 netstat参数虽然很多,但是常用的不多,主 ...
- Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略
主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...
- Ubuntu设置程序开机自启或者开机禁止加载
先说说ubuntu,它有运行级别这个概念 0:停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system 3:完全多用户 5:图形化 6:重启 例子:按指定顺序.在指 ...
- android 开机自启动的几种方法,监听不到RECEIVE_BOOT_COMPLETED的处理办法
第一种: 监控RECEIVE_BOOT_COMPLETED,即开机启动事件 另外一种: 监控sd卡mount事件 开机总会扫描sd卡吧? 监控sd卡事件也有类似开机启动效果.特别app安装在sd卡 ...
- 利用angular指令监听ng-repeat渲染完成后执行脚本
业务中有时需要在异步获取数据并用ng-repeat遍历渲染完页面后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己动手写.有经验的同学都应该知道,在ng-r ...
- angular指令监听ng-repeat渲染完成后执行自定义事件方法
今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露 ...
- linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports
1. 背景 linux服务器启动时,会对指定的端口进行监听bind,如果同一个机器上这个端口已经被使用,则监听失败,程序无法启动. linux客户端连接服务器accept时,系统会分配本地临时端口用于 ...
- Linux 文件锁flock 实现两个进程相互监听存活状态
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指 ...
- linux tomcat开机自启/nginx开机自启
修改/etc/rc.d/rc.local文件,修改完成后需执行以下指令才能正常自启动 chmod +x /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS AD ...
随机推荐
- 优化UITableViewCell高度计算的那些事 by --胡 xu
这篇总结你可以读到: UITableView高度计算和估算的机制 不同iOS系统在高度计算上的差异 iOS8 self-sizing cell UITableView+FDTemplateLayout ...
- Shell数组以及排序算法(冒泡、直接选择、反转)
Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...
- 5、前端--js常量、变量、5种基本数据类型(number string boolean undefined object)、运算符、流程控制、三元运算符、函数、自定义对象、内置对象、BOM操作
变量与常量 在JS中声明变量需要使用关键字 老版本 var(全部都是全局变量) 新版本 let(可以声明局部变量) # 推荐使用let(其实问题不大) 在JS中声明常量也需要使用关键字 const # ...
- Solution -「ARC 104C」Fair Elevator
\(\mathcal{Description}\) Link. 数轴从 \(1\sim 2n\) 的整点上有 \(n\) 个闭区间.你只知道每个区间的部分信息(可能不知道左或右端点,或者都不知 ...
- simulink模块执行顺序
1.simulink各模块执行顺序 Simulink模块的执行顺序都是序贯进行的,也就是沿着信号的流向进行.没有输入的模块先进行计算,更新状态量与输出,需要输入信号的模块等到输入信号准备ready之后 ...
- TCP/IP详解 读书笔记(一):概述
分层 网络协议通常分不同层次进行开发,每一层负责不同的职责,一个协议簇指的是一组不同层次上的多个协议的组合. TCP/IP通常被认为是一个四层协议系统: 链路层:主要是处理与电缆或其他传输媒介的物理接 ...
- .NET 云原生架构师训练营(权限系统 系统演示 ActionAccess)--学习笔记
目录 模块拆分 环境配置 默认用户 ActionAccess 模块拆分 环境配置 mysql migration mysql docker pull mysql docker run -p 3306: ...
- Linux 下 Git版本升级
一.下载需要安装的版本号 wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.0.tar.gz 二.安装需求 yum ...
- Linux系列——配置SSH免密登录
在进行配置之前需要先关闭防火墙.配置hosts映射. 具体参见:Linux系列--常规基础操作 下面重点说明如何配置SSH: 1.编辑sshd服务配置文件,开启免密验证, vi /etc/ssh/ ...
- .大内高手专栏: NET中间语言(IL)
补充知识点:opcode 在前面我们已经知道了,由于计算机只认识0和1,所以,源代码"NOP"是无法直接运行的.当Assembler遇到"NOP"的时候,为了生 ...