linux设置应用开机自启(通用:mysql、jar、nginx、solr...)
1. 业务场景
用于单机生产环境,防止服务器断电或者强制重启导致的服务下线。
2. 实现方案
- 对于无状态服务,可容器部署设置
restart: always,systemctl eable docker - 对于有状态服务,可编写自启脚本,如下
- ① 编写执行脚本
#!/bin/bash
APP_NAME=saveName
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20 # 等待应用启动的时间
APP_PORT=81 # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT} # 应用健康检查URL
APP_HOME=$(pwd) # 从package.tgz中解压出来的jar包放到这个目录下
HEALTH_CHECK_FILE_DIR=${APP_HOME}/status # 脚本会在这个目录下生成nginx-status文件
JAR_NAME=${APP_HOME}/app.jar # jar包的名字
JAVA_OUT=/dev/null #应用的启动日志
JAVA_HOME=${APP_HOME}/jdk-11.0.16
# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
#mkdir -p ${APP_HOME}
usage() {echo "Usage: $PROG_NAME {start|stop|restart|init|jdk_install}"exit 2
}
jdk_install() {tar zxvf ${APP_HOME}/jdk-11.0.16_linux-x64_bin.tar.gztee -a /etc/profile << EOFexport JAVA_HOME=${APP_HOME}/jdk-11.0.16export PATH=${APP_HOME}/jdk-11.0.16/bin:\$PATHexport CLASS_PATH=${APP_HOME}/jdk-11.0.16/lib
EOFecho "如没有jdk日志,请手动执行:source /etc/profile &java -version"source /etc/profilejava -version
}
health_check() {exptime=0echo "checking ${HEALTH_CHECK_URL}"while truedostatus_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`if [ "$?" != "0" ]; thenecho -n -e "\rapplication not started"elseecho "code is $status_code"if [ "$status_code" == "401" ];thenbreakfifisleep 5((exptime++))echo -e "\rWait app to pass health check: $exptime..."if [ $exptime -gt ${APP_START_TIMEOUT} ]; thenecho 'app start failed'exit 1fidoneecho "check ${HEALTH_CHECK_URL} success"
}
start_application() {echo "starting java process"echo "nohup java -jar ${JAR_NAME} --spring.profiles.active=${env} > ${JAVA_OUT} 2>&1 &"nohup java -jar ${JAR_NAME} --spring.profiles.active=${env} > ${JAVA_OUT} 2>&1 &echo "started java process"
}stop_application() {checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`if [[ ! $checkjavapid ]];thenecho -e "\rno java process"returnfiecho "stop java process"times=60for e in $(seq 60)dosleep 1COSTTIME=$(($times - $e ))checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`if [[ $checkjavapid ]];thenkill -9 $checkjavapidecho -e "\r -- stopping java lasts `expr $COSTTIME` seconds."elseecho -e "\rjava process has exited"break;fidoneecho ""
}
start() {start_applicationhealth_check
}
stop() {stop_application
}
case "$ACTION" instart)start;;stop)stop;;restart)stopstart;;jdk_install)jdk_install;;*)usage;;
esac
- ① 编写自启脚本
#!/bin/sh
# chkconfig: 2345 20 20
# clear file
base=baseArg
serveStart() {echo "正在启动Solr"cd baseArg/servesh baseArg/serve/deploy.sh start
}
serveStart
- ② 注册自启脚本至linux开启自动调用目录
ACTION=$1
usage() {echo "Usage: $PROG_NAME {init|stopAll}"exit 2
}
stopAll(){
checkjavapid=`ps -ef | grep $serveName| awk '{print$2}'`
kill -9 $checkjavapid
}
init(){
base=$(pwd)
sed -i "s|baseArg|${base}|g" $base/autoSave.sh
chmod 777 $base/autoSave.sh
rm -rf /etc/init.d/autoSave.sh
cp -rf $base/autoSave.sh /etc/init.d/autoSave.sh
chmod 777 /etc/init.d/autoSave.sh
chkconfig --add autoSave.sh
chkconfig autoSave.sh on
chkconfig --list
}
case "$ACTION" ininit)init;;stopAll)stopAll;;*)usage;;
esac相关文章:
linux设置应用开机自启(通用:mysql、jar、nginx、solr...)
1. 业务场景 用于单机生产环境,防止服务器断电或者强制重启导致的服务下线。 2. 实现方案 对于无状态服务,可容器部署设置 restart: always,systemctl eable docker对于有状态服务,可编写自启脚本,如下 ① 编写执行…...
Offset Explorer(Kafka消息可视化工具)报invalid hex digit ‘{‘错误解决方法
解决办法: 根据代码的实际情况,设置成对应的值。设置完成后点update、refresh更新。...
深度学习:模型训练过程中Trying to backward through the graph a second time解决方案
1 问题描述 在训练lstm网络过程中出现如下错误: Traceback (most recent call last):File "D:\code\lstm_emotion_analyse\text_analyse.py", line 82, in <module>loss.backward()File "C:\Users\lishu\anaconda3\envs\pt2\lib\site-packag…...
【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现
目录 一、非线性方程式求根 1、二分法(Bisection Method、对分法) a. 理论简介 b. python实现 2、迭代法(Iterative Method) a. 理论简介 b. python实现 3、Newton 迭代法(Newtons Method) a. 理论…...
linux主机名
title: linux主机名 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: Linux系统的主机名 查询主机名 hostnamehostnamectl 修改主机名 hostnamectl set-hostname <newhostname>...
前端uniapp图片select联动文本切换
图片 代码 <template><!-- 这个是uniapp的下拉框 --><uni-data-select v-model"pay_type" :localdata"range" change"handleSelectChange"></uni-data-select><!-- 图片 --><image :src"dynamicImage&qu…...
java - 包装类
目录 前言 一 什么是包装类? 1.获取包装类的两种方式(了解)(已经淘汰) 2.两种方式获取对象的区别(掌握) 3.自动装箱&&自动装箱 4.Integer常用方法 总结 前言 大家好,今天给大家讲解一下包装类 一 什么是包装类? 在Java中,每个基本数据类型都有对应…...
防火墙基础
目录 1、 防火墙支持那些NAT技术,主要应用场景是什么? 2、当内网PC通过公网域名解析访问内网服务器时,会存在什么问题,如何解决? 3、防火墙使用VRRP实现双机热备时会遇到什么问题,如何解决? 4…...
服务断路器_Resilience4j的断路器
断路器(CircuitBreaker)相对于前面几个熔断机制更复杂,CircuitBreaker通常存在三种状态(CLOSE、OPEN、HALF_OPEN),并通过一个时间或数量窗口来记录当前的请求成功率或慢速率,从而根据这些指标来…...
微信小程序学习笔记3.0
第3章 资讯类:仿今日头条微信小程序 3.1 需求描述及交互分析 需求描述 仿今日头条微信小程序,要具有以下功能。 (1)首页新闻频道框架设计,包括底部标签导航设计、新闻检索框设计及新闻频道滑动效果设计。 (2)首页新闻内容设计,包括新闻标题、新闻图片及新闻评论设计…...
nginx 反向代理 负载均衡 动静分离
一样东西的诞生通常都是为了解决某些问题,对于 Nginx 而言,也是如此。 比如,你出于无聊写了一个小网站,部署到 tomcat 之后可以正常访问 但是后来,你的这个小网站因为内容很诱人逐步的火了,用户越来越多&a…...
Codeanalysis(tca)后端二次开发环境搭建
先试用官方脚本文件件quick_install.sh将整个项目启动起来,然后到每个微服务下查看每个服务的pid进程,需要调试哪个先把对应的微服务关闭手动启动,具体启动流程如下: cd 到项目根目录下 source script\config.sh # 激活系统环境…...
JS前端树形Tree数据结构使用
前端开发中会经常用到树形结构数据,如多级菜单、商品的多级分类等。数据库的设计和存储都是扁平结构,就会用到各种Tree树结构的转换操作,本文就尝试全面总结一下。 如下示例数据,关键字段id为唯一标识,pid为父级id&am…...
Automation Anywhere推出新的生成式AI自动化平台,加速提高企业生产力
在9 月 19 日的Imagine 2023 大会上,智能自动化领域的领导者 Automation Anywhere 宣布对其自动化平台进行扩展。推出了新的 Responsible AI Layer,并宣布了四项关键产品更新,包括全新的 Autopilot,它可以利用生成式 AI ÿ…...
电缆隧道在线监测系统:提升电力设施安全与效率的关键
随着城市化进程的加快,电力电缆隧道在保障城市电力供应方面的地位日益重要。然而,电缆隧道环境复杂,容易受到多种因素影响,如温度、湿度、烟雾、水位等,严重威胁电力设施的安全与稳定运行。在此背景下,电缆…...
Java BigDecimal 详解
目录 一、BigDecimal 1、简介 2、构造器描述 3、方法描述 4、使用 一、BigDecimal float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它…...
简述信息论与采样定理
信息论 香农信息论发表于1948/1949年,它由三部分组成:信号采样、信源编码、信道编码; 信号采样:采样理论研究在何种条件下对连续信号进行采样,从而得到的离散型号可以可逆地恢复出采样前的连续信号。采样得到的离散实…...
网络安全之网站常见的攻击方式
这是作者自学的哈,不算课程内容。 网页中出现大量黑链 网站看着很正常,但是会隐藏一些链接。网页的链接几乎都是标签,这种黑链就是通过链接标签<a></a>或者script在里面链入恶意脚本,等待浏览者的访问,通…...
iOS Swift 拍照识别数字(Recognizing Text in Images)
可以用腾讯云 OCR的iOS demo - 腾讯云 苹果官方的解决方案(识别度太低) Recognizing Text in Images - apple developer Extracting phone numbers from text in images(Sample Code) - apple developer import UIKit import Visionclass ViewContro…...
数学建模:智能优化算法及其python实现
数学建模:智能优化算法及其python实现 智能优化算法简介差分进化算法(Differential Evolution,DE)遗传算法(Genetic Algorithm,GA)粒子群优化算法(Particle Swarm Optimization,PSO)模拟退火算法(Simulated Annealing,SA)蚁群算法(Ant Colony Optimization,ACO)…...
荣品RV1126 SDK编译避坑指南:从环境配置到分区调整,手把手解决常见编译错误
RV1126 SDK编译实战:从环境搭建到分区优化的全流程解决方案 1. 开发环境配置与初始化 RV1126开发环境的搭建是整个开发流程的第一步,也是后续所有工作的基础。一个稳定、高效的开发环境能够显著提升开发效率,减少不必要的错误。 首先需要确保…...
从TPM到机密计算:远程证明技术原理与zap1项目实践指南
1. 项目概述与核心价值最近在整理一些零散的学习笔记时,发现了一个挺有意思的项目,叫Frontier-Compute/zap1-learning-attestation。乍一看这个标题,可能有点让人摸不着头脑,尤其是对于刚接触可信计算或者硬件安全领域的朋友来说。…...
Shell脚本加固实战:用shellguard提升脚本健壮性与安全性
1. 项目概述:一个为Shell脚本穿上“防弹衣”的守护者 在运维开发、自动化部署乃至日常的系统管理工作中,Shell脚本是我们最忠实、最高效的伙伴。从简单的日志清理到复杂的CI/CD流水线,Shell脚本无处不在。然而,脚本的安全性、健壮…...
飞书自动化工具feishu-atuo:Python积木式开发与实战指南
1. 项目概述:飞书自动化,从零到一的效率革命 如果你和我一样,每天的工作流里都离不开飞书,那你肯定也经历过这些时刻:手动把日报、周报从文档复制到表格里归档;在多个群里重复发送同样的通知;为…...
基于WebSocket的机械爪远程控制桥接系统设计与实战
1. 项目概述:一个连接物理世界与数字世界的“机械爪”远程控制桥最近在捣鼓一个挺有意思的开源项目,叫lucas-jo/openclaw-bridge-remote。光看名字,你可能觉得这又是一个关于机器人或者机械臂的遥控项目,但实际深入进去࿰…...
Carapace:统一跨Shell命令行补全的Go语言引擎
1. 项目概述:一个为Shell而生的全能补全引擎 如果你和我一样,每天有超过一半的工作时间是在终端里度过的,那你一定对命令行补全这件事又爱又恨。爱的是,一个恰到好处的补全能让你行云流水,效率倍增;恨的是…...
RFM69无线通信进阶:从基础收发到可靠数据传输系统构建
1. 项目概述:从点对点收发迈向可靠通信在物联网和嵌入式开发领域,无线通信模块是连接物理世界与数字世界的桥梁。RFM69系列模块,特别是工作在433MHz或915MHz等Sub-GHz频段的RFM69HCW,因其出色的抗干扰能力、较远的传输距离以及相对…...
数据分析师GitHub作品集构建指南:从项目架构到技术实现
1. 项目概述:一个数据分析师的作品集仓库意味着什么? 在数据驱动的时代,简历上的“精通Python/SQL”已经不够看了。面试官,尤其是那些懂行的技术面试官,更想看到的是你如何用这些工具解决真实世界的问题。这就是为什么…...
Redis分布式锁进阶第二十二篇拆解
一、本篇前置衔接 第九十二篇我们完成Redisson源码拆解、手写复刻、底层内核穿透,彻底明白分布式锁代码层、脚本层、线程层原理。到此为止,代码、源码、坑点、运维、监控、面试全部讲透。但很多开发最大的困惑依旧存在:不同体量公司为什么锁架…...
Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器
Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit Topit是一款专为macOS系统…...
