原文首发于博客园,作者:后青春期的Keats;地址:https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢!

前言

最近公司为客户重新部署了一套新环境,由我来完成了基础环境的配置,配置过程中总结了一些经验,分享给各位园友

  1. 使用 curl 命令检查网络

    拿到新服务器后,首先检查服务器网络是否通畅。我们常用的 ping 命令使用的是 ICMP 协议,大部分服务器都设置了域名出入站规则,即使某些地址可以 ping 通,也存在服务器无法访问的情况。这时可以使用 curl host:port 命令来测试该服务器能否正常发送 http 请求到外部服务器

  2. 安装 JDK

    新服务器一般没有 JDK ,可以使用 java -version 命令查看。如果没有,则通过 yum 命令安装之,如果有但版本不对也可以先卸载再安装

    # 卸载
    rpm -qa | grep java | xargs rpm -e --nodeps
    # 安装 1.8
    yum install java-1.8.0-openjdk* -y
  3. 检查服务器时间

    一般新服务器时间都会与网络时间不一致,这时就需要我们先同步一下服务器时间

    date/timedatectl 命令可用于查看系统当前的时间,如果和网络时间不一致

    # 安装日期工具
    yum -y install ntp ntpdate
    # 同步时间
    ntpdate cn.pool.ntp.org
    # 将系统时间写入硬件时间
    hwclock --systohc
  4. 打开指定的端口

    应用部署了之后,由于防火墙的限制,需要手动打开应用所占用的端口。打开命令如下:

    firewall-cmd --zone=public --add-port=80/tcp --permanent

    执行完之后,重新载入防火墙配置

    firewall-cmd --reload

    有的服务器在内网中,有外网域名映射,那同时需要开放该端口外网到内网的映射。这个根据服务性质来确定。如果某个微服务只是服务间内网访问。就不建议暴露在公网中

Jar 包一键重启

Java 项目在 Linux 环境中一般采用 war 包到 Tomcat 或者 jar 包部署的方式在 Linux 部署,在自动化部署大行其道的今天,仍然会有不少的公司采用手动部署的方式部署 jar 包(比如我们公司),最近我们公司为客户重新升级了一下新的环境(新版本上线到新服务器)由我兼任运(reng bao)维(chong qi)工程师来负责项目的部署上线。项目初上线的时候重启操作是非常频繁的,一般我们会采用如下的命令:

ps -ef |grep 服务名
kill -9 PID
nohup java -jar 服务名 &
tail -1000f nohup.out

这四步一气呵成,手速快的话 10s 左右就 OK 了,然而当微服务项目很多的时候,要输入的命令数量就是 4n ,有一次服务器时间不准,我重设了一下服务器时间,导致时钟回退,雪花ID无法生成。我一口气重启完了所有服务,那个酸爽。。。

于是我尝试着学习 shell 命令来写出来一个简单的一键重启并输出日志的脚本

脚本内容

#!/bin/bash
# 作者 后青春期的Keats
# 博客地址 https://www.cnblogs.com/keatsCoder/ # 默认应用名称
defaultAppName='redis-cli.jar'
appName='' if [ $1 && $1!=0 ]
then
appName=$1
else
appName=$defaultAppName
fi echo ">>>>>>本次重启的应用: $appName <<<<<<" # 关闭应用方法
stopApp(){
pid=$( ps -ef |grep $appName |grep 'java -jar'|grep -v grep|awk '{print $2}')
kill -9 $pid
} # 启动应用方法
startApp(){
nohup java -jar $appName &
} # 滚动打印日志
printLog(){
tail -1000f nohup.out
} if [ $2 ]
then
echo '第二个参数有值,仅启动'
else
stopApp
fi
startApp
printLog

使用方法

使用 vi/vim 命令在应用 jar 包所在目录下新建一个 restart.sh 的文件

vi restart.sh

复制上面的代码,更改该文件权限为可执行

chmod +x restart.sh

执行脚本,para1 para2 是可选项,para1 指定重启的项目名称,para2 存在时只启动,不杀死进程

./restart.sh [para1] [para2]

增强使用方法

细心的朋友可能注意到,脚本中有个变量 defaultAppName 没错,它就是默认重启的项目名称,对我们来说,一般 jar 包名称不会经常修改,因此可以通过修改默认应用名称的方式来简化执行时所需要输入应用名称的步骤。

修改了默认名称之后,如果想使用仅启动模式,就需要使用

./restart 0 1

来实现,第一个参数 0 不会被识别成应用名称,只是用作占位符。

Jar包一键重启的Shell脚本及新服务器部署的一些经验的更多相关文章

  1. 结合docker发布后端项目(基于gradle包管理)的shell脚本

    结合docker发布后端项目(基于gradle包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理) 目前主流的 ...

  2. linux 下检查java jar包 程序是否正常 shell

    linux 下检查java jar包 程序是否正常 shell http://injavawetrust.iteye.com BATCH_SERVER="batch.jar" NR ...

  3. 结合docker发布前端项目(基于npm包管理)的shell脚本

    结合docker发布前端项目(基于npm包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 目前主流的前后端分离的项目中,常常在部署 ...

  4. 通过shell脚本实现代码自动化部署

    通过shell脚本实现代码自动化部署 一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打 ...

  5. spring boot 以jar的方式启动常用shell脚本

    用spring boot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下: #!/bin/bashJAVA_OPTIONS_INITIAL=- ...

  6. 根据已有的Jar包 一键生成对应的mavenpom.xml信息

    根据已有的jar包信息一键生成对应的maven坐标信息 .想一个问题 假如 我有一个SSH的项目, jar包是配置在lib中, 我现在想把它做成maven格式的SSH项目  ,那么这些jar包在mav ...

  7. 提取aar 包中的jar包,反编译再替换成新的aar

      参考了 http://blog.csdn.net/hekewangzi/article/details/44676797 针对aar包,增加一些说明 aar包本质应该是zip文件.可以用360解压 ...

  8. shell脚本自动清理服务器日志、图片等信息

    在做性能测试的时候,linux服务器时常会产生大量数据,如日志信息,图片信息,文件信息等,压测一段时间后,导致服务器磁盘空间暂满而崩溃,每天手动清理比较麻烦, 利用shell脚本自动清理,脚本如下 1 ...

  9. 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...

随机推荐

  1. Mysql常用sql语句(一)- 操作数据库

    21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...

  2. java-Deque

    2020-03-07 13:42:05 双端队列与通常的Queue的区别仅仅在于多了双端队列可以在队首队尾进行插入或者删除操作. 队尾添加:offerLast 队尾删除:pollLast 队尾查询:p ...

  3. 浅尝Go语言GC

    大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君.当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句, ...

  4. TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变

    去年TensorFlow官方推出了模型优化工具,最多能将模型尺寸减小4倍,运行速度提高3倍. 最近现又有一款新工具加入模型优化"豪华套餐",这就是基于Keras的剪枝优化工具. 训 ...

  5. Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序

    Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序 引子   上期给大家介绍了如何使用如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓 ...

  6. Excel中减少两边的字符

    从右边减少几个字符: =LEFT(A1,LEN(A1)-4)

  7. 事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装

    利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务 比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的 ...

  8. ajax的封装——jq简化版

    最近在复习ajax的知识,练习了下ajax的封装,此处做下笔记 废话不多说,直接代码 //发请求 //此处的url为请求地址,type为请求方式,success为请求成功的回调函数 myaxios({ ...

  9. 下面总结一些在HTML中经常使用到的快捷键

    使用的编辑器是VS code: 首先是很基础的: ctrl+s  :保存: ctrl+a  :  全选: ctrl+c , ctrl+c , ctrl+v : 剪切,复制,粘贴: ctrl+z ,ct ...

  10. spring boot 源码赏析之事件监听

    使用spring Boot已经快1年多了,期间一直想点开springboot源码查看,但由于种种原因一直未能如愿(主要是人类的惰性...),今天就拿springboot 的监听事件祭刀. spring ...