[含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]

前言:

个人博客:www.wdcdbd.com

  我们在linux部署.jar项目时,都需要通过java -jar的形式来部署,每次都要手动停止,部署,这样用起来会很麻烦。所以,这篇文章就是自己通过.sh脚本一键启动停止重启查看状态查看日志。这样会方便一些。

一、编写.sh脚本前准备工作

  1.  将你的java项目放到你linux习惯的位置
  2. 创建一个.sh文件,名字自定义。

我就给他命名为Three.sh了,具体你可以自定义

注意!!在编写.sh脚本文件时,不可以在windows环境下写好之后再放到linux环境中,因为两套系统使用的格式是不一样的。Windows下换行符号是“\r\n”,而linux下是“\n”没有”\r”,当shell脚本是在Windows下编写的时候,默认所有的换行符都是“\r\n”,linux下是没办法正确识别这个文件的。如果你已经这样做了,那么就要在linux下执行以下命令来去除掉/r
 

sed -i 's/\r$//'  sh文件名.sh

二、编写.sh脚本文件

 这是完整脚本代码。为了让大家更直观的看到脚本文件中的所有命令,下边我就将启动,停止,重启,查看状态,查看日志,这几个命令拆开来讲解如果已经对其有一些了解的话,可以直接使用这个完整的脚本代码,进行修改即可。

#!/bin/bash# jar包路径-你放置jar包的路径,可自定义
HOME='/home/dblog'# 启动
start(){
cd $HOME
# 将java程序后台启动,并将启动日志指向springBootThree-1.0.log中
nohup java -jar springBootThree-1.0.jar > springBootThree-1.0.log 2>&1 & 
# 打印字符串
echo "启动成功"
}# 停止
stop(){# 查询到项目的pidtpid=$(ps -ef | grep springBootThree-1.0.jar | grep -v grep | awk '{print $2}')# 判断是否为空 
if [ -z "$tpid" ]then
# 如果为空 则打印这句话echo Application is already stppedelse
# 如果不为空则执行echo kill $tpid 
# 关闭进程kill -9 $tpidecho "程序已关闭"
fi
}# 查看状态
status(){# 获取pid的pid=$(ps -ef | grep springBootThree-1.0.jar | grep -v grep)if [ -z "$pid" ]
thenecho "程序不存在"
elseecho $pid
fi
}# 查看日志信息
log(){
tail -f $HOME/springBootThree-1.0.log
}case $1 instart)start
;;
stop)stop
;;
status)status
;;
log)log
;;
restart)$0 stopsleep 5$0 start
;;
*)echo "只能是{start|stop|log|restart}"
;;
esac
exit 0

0、.sh脚本格式

第一行必须是这个,没有什么为什么格式就是这样

1、启动

#!/bin/bash# jar包路径-你放置jar包的路径,可自定义
HOME='/home/dblog'# 启动
start(){
cd $HOME
# 将java程序后台启动,并将启动日志指向springBootThree-1.0.log中
nohup java -jar springBootThree-1.0.jar > springBootThree-1.0.log 2>&1 &
# 打印字符串
echo "启动成功"
}

2、停止

注意!!(小坑): .sh脚本语法是强语法结构,所以格式很重要,使用if判断时,中间的条件左右必须有空格

# 停止
stop(){# 查询到项目的pidtpid=$(ps -ef | grep springBootThree-1.0.jar | grep -v grep | awk '{print $2}')# 判断是否为空 
if [ -z "$tpid" ]then
# 如果为空 则打印这句话echo Application is already stppedelse
# 如果不为空则执行echo kill $tpid 
# 关闭进程kill -9 $tpidecho "程序已关闭"
fi
}

3、查看状态

# 查看状态
status(){# 获取pid的pid=$(ps -ef | grep springBootThree-1.0.jar | grep -v grep)if [ -z "$pid" ]
thenecho "程序不存在"
elseecho $pid
fi
}

4、查看日志

log(){
tail -f $HOME/springBootThree-1.0.log
}

 5、case语法

最后使用case语法 将其联系起来即可

# 判断外部输入的是什么关键词 (start|stop|status|log|restart)
case $1 instart)start
;;
stop)stop
;;
status)status
;;
log)log
;;
restart)$0 stopsleep 5$0 start
;;
*)echo "只能是{start|stop|log|restart}"
;;
esac
exit 0

6、 最后

保存当前.sh文件,然后使用 chmod 777 文件名 变为可执行文件。

其实使用 chmod +x 文件名 给一个执行权限就可以了,但是我闲麻烦,所以就直接设置最大权限啦。

 三、执行.sh脚本

查看状态: ./Three.sh status

启动项目:./Three.sh start

查看日志: ./Three.sh log

关闭项目: ./Three.sh stop

重启项目: ./Three.sh restart

这就是.sh脚本自动部署脚本的基本使用方式了,快去掌握吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XCTF:hello_pwn[WriteUP]

使用checksec查看ELF文件信息 checksec 4f2f44c9471d4dc2b59768779e378282 这里只需要注意两个重点: Arch:64bit的文件,后面写exp的重点 Stack:No canary found 没有栈溢出保护 使用IDA对ELF文件进行反汇编 双击左侧的函数栏…

陶瓷碗口缺口检测-图像分割

图像分割 由于对碗口进行缺口检测,因此只需要碗口的边界信息。得到陶瓷碗区域填充后的图像,对图像进行边缘检测。这是属于图像分割中的内容,在图像的边缘中,可以利用导数算子对数字图像求差分,将边缘提取出来。 本案…

test-04-test case generate 测试用例生成 tcases A model-based test case generator

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 自动生成测试用例 Tcases&#xf…

查看lucene和elasticsearch的版本对应关系

一、Maven仓库官网: https://mvnrepository.com/ 二、搜索elasticsearch,然后点击Server或者elasticsearch进入。 三、点击相应的版本号进入。 四、查看对应的lucene版本。 END

SwiftUI CoreData Picker

开发多账本功能 CoreData 与 Picker 的使用 上代码: // // TestZhangBenPicker.swift // pandabill // // Created by 朱洪苇 on 2024/1/14. //import SwiftUIstruct TestZhangBenPicker: View {FetchRequest(sortDescriptors: [SortDescriptor(\.cc_at)],anima…

VMware迁移虚拟机教程,适用于换电脑、重装系统

新购入了一台电脑,接下来可能会有连续好多篇与装机/重装系统/装软件有关的文章,平时可能只是纸上谈兵,这次是花重金买素材了,建议收藏 问题背景:在之前的电脑上,安装了VMware Workstation,并配…

第三十九周:文献阅读+Transformer

目录 摘要 Abstract 文献阅读:CNN与LSTM在水质预测中的应用 现有问题 提出方法 相关模型 CNN LSTM CNN-LSTM神经网络模型 模型框架 CNN-LSTM神经网络 研究实验 数据集 模型评估指标 数据预处理 实验设计与结果 研究贡献 Transformer Encoder-Dec…

C#灵活的任务调度组件FluentScheduler

FluentScheduler是一个C#的灵活的任务调度组件,支持各类任务调度。网上有很多演示代码,此处记录下来,方便自己查找。 // See https://aka.ms/new-console-template for more information //Console.WriteLine("Hello, World!");us…

prometheus常用exporter

一、node-exporter node_exporter:用于监控Linux系统的指标采集器。 未在k8s集群内的linux机器监控 GitHub - prometheus/node_exporter: Exporter for machine metrics 常用指标: •CPU • 内存 • 硬盘 • 网络流量 • 文件描述符 • 系统负载 •…

Win系统搭建Elasticsearch实现公网远程访问本地服务

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多…

七、Qt 信号和槽

在QT4以上的版本,在窗体上用可以通过选中控件,然后点击鼠标右键单击按钮,选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。 …

【Docker】centos中及自定义镜像,并且上传阿里云仓库可提供使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《【Docker】centos中及自定义镜像,…

零零鸡生态养殖农场“出圈”,有“智”更有“质”,助力本土品牌高质量发展

什么是生态农场?不同于常规农场,它对农业生产经营单元的各个关键环节有着极为严格的要求,强调整体、协调、循环、再生、多样,产品质量自然更好,附加值也更高,更能满足日趋多样化的巨大市场。零零鸡生态农场…

C#调用WinAPI部分命令

C#是针对WIndows而生的,开发WIndows应用最快。然而想要让自己程序进阶,就不需深入Windows底层,WinAPI为我们提供了一把利刃。 目录 1、查找窗口句柄 2、查找窗口内子对象 3、指定窗口样式 4、指定窗口扩展样式 5、调整窗口大小Z轴&…

还在因为版本不一致重装node吗,用它试试

一、卸载nodejs 首先卸载已安装的nodejs,总体分三步 1)打开控制面板,卸载nodejs 2)打开计算机->高级->环境变量,删除path中nodejs相关的配置 3)打开nodejs安装目录,整体删除 打开cmd,输入以下命令&#xff…

为什么要进行漏洞扫描工作

随着互联网的普及和信息技术的飞速发展,网络安全问题愈发引人关注。其中,漏洞扫描作为保障网络安全的重要手段,受到了广泛的关注和应用。本文将详细介绍漏洞扫描的概念、效果、使用场景等,以期为读者提供有关漏洞扫描的全面了解。…

网络分流规则

现在的网络是越来越复杂。 有必要进行分流。 有一些geosite.dat是已经整理好的,包含许多的网站的分类: 分流规则: route规则 主要是: {"type": "field","outboundTag": "direct","domain&quo…

【Vue3】2-11 : 生命周期钩子函数及原理分析

本书目录:点击进入 一、组件生命周期概述 1.1 官方生命周期 1.2 钩子函数(回调函数) ▶ 生命周期可划分为三个部分(- >表示执行循序): 二、实战:测试生命周期流程 > 代码 > 效果 一…

在CMake中自定义宏 add_definitions(-DDEBUG)

hehedalinux:~/Linux/loveDBTeacher-v6$ tree . ├── CMakeLists.txt └── test.c0 directories, 2 files hehedalinux:~/Linux/loveDBTeacher-v6$ test.c #include <stdio.h> #define NUMBER 3int main() {int a 10; #ifdef DEBUGprintf("我是一个程序猿,我…

QT获取程序编译时间与当前时间的区别及应用场景

一.获取编译时间与当前时间的区别 1.编译日期时间&#xff1a;这个信息通常用于标识某个源代码文件或整个应用程序的编译时间&#xff0c;程序一旦编译出来不会再改变&#xff0c;通常用于记录或跟踪代码的版本和更改历史。 2.运行当前日期时间&#xff1a;这是指程序在运行时…