厦门网站建设ui,沧州响应式网站开发,企业网站建设义乌,设计广告用什么软件前言
Springboot 内置了 tomcat#xff0c;部署十分的方便#xff0c;无需额外的应用服务器。但是在部署过程中#xff0c;却有很多种方式 本文总结在工作中常见的 linux 部署方式
一、通过nohup命令部署
linux 可以通过 nohup 命令将项目部署在后台#xff0c;即使终端…前言
Springboot 内置了 tomcat部署十分的方便无需额外的应用服务器。但是在部署过程中却有很多种方式 本文总结在工作中常见的 linux 部署方式
一、通过nohup命令部署
linux 可以通过 nohup 命令将项目部署在后台即使终端退出进程仍然在运行并且会生成一个 nohup.out 文件 但是… 想要结束进程只能先找到进程的 pid再 kill 掉
nohup java -jar xxx.jar 缺点
1、项目升级不方便需要先找到进程再 kill 掉再重新用 nohup 启动进程步骤繁琐 2、项目升级过程中经常需要一些额外的操作例如备份配置文件备份 jar。单单通过 nohup 命令无法完成附加的额外操作
二、通过ssh脚本nohup方式部署
前面讲了 nohup 的部署方式和它的繁琐缺点是否能够通过 ssh 脚本自动化 nohup 的部署呢 操作步骤先通过端口找到进程进程存在则 kill 掉再启动项目无需人工操作 还可以在启动前备份好 jar 包一些其他额外操作
#!/bin/bash
port9090
pid$(netstat -lnp | grep :$port | awk {print $7} | awk -F/ { print $1 });
if [ -n $pid ]; thenkill -9 $pid;
fi
nohup java -jar xxx.jar
echo project start completed.缺点
1、脚本有丢失的风险需做好备份 2、脚本需要维护换了端口jar 移动了位置或改名都需要调整脚本 3、灵活性差如果只想停止不想重启怎么办或者只想执行某个步骤这时就显得很麻烦
三、linux的service服务(推荐)
linux 的 service 功能可以很好的管理服务的启动、重启、停止配置开机启动等信息 每次操作只需一个简单的命令并且可以单独执行某个操作解决了上面两种部署方案的不足 通过简单的文件配置即可完成服务的管理十分推荐
[Unit]
Descriptionexample
Aftersyslog.target[Service]
ExecStartjava -jar /xxx.jar[Install]
WantedBymulti-user.target具体的 service 操作介绍:
1、service配置文件
每一个 Unit 都有一个配置文件告诉 Systemd 怎么启动这个 Unit 。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是里面存放的大部分文件都是符号链接指向目录/usr/lib/systemd/system/真正的配置文件存放在那个目录。
systemctl enable命令用于在上面两个目录之间建立符号链接关系。
开机时Systemd只执行/etc/systemd/system目录里面的配置文件。
service文件定义了一个服务分为[Unit][Service][Install]三个小节如下
[Unit]
Description:描述
After在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的2、配置文件的区块
[Unit]区块通常是配置文件的第一个区块用来定义 Unit 的元数据以及配置与其他 Unit 的关系。它的主要字段如下。
Description简短描述
Documentation文档地址
Requires当前 Unit 依赖的其他 Unit如果它们没有运行当前 Unit 会启动失败
Wants与当前 Unit 配合的其他 Unit如果它们没有运行当前 Unit 不会启动失败
BindsTo与Requires类似它指定的 Unit 如果退出会导致当前 Unit 停止运行
Before如果该字段指定的 Unit 也要启动那么必须在当前 Unit 之后启动
After如果该字段指定的 Unit 也要启动那么必须在当前 Unit 之前启动
Conflicts这里指定的 Unit 不能与当前 Unit 同时运行
Condition...当前 Unit 运行必须满足的条件否则不会运行
Assert...当前 Unit 运行必须满足的条件否则会报启动失败[Install]通常是配置文件的最后一个区块用来定义如何启动以及是否开机启动。它的主要字段如下。 WantedBy它的值是一个或多个 Target当前 Unit 激活时enable符号链接会放入/etc/systemd/system目录下面以 Target 名 .wants后缀构成的子目录中 RequiredBy它的值是一个或多个 Target当前 Unit 激活时符号链接会放入/etc/systemd/system目录下面以 Target 名 .required后缀构成的子目录中 Alias当前 Unit 可用于启动的别名 Also当前 Unit 激活enable时会被同时激活的其他 Unit [Service]区块用来 Service 的配置只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。
Type定义启动时的进程行为。它有以下几种值。
Typesimple默认值执行ExecStart指定的命令启动主进程
Typeforking以 fork 方式从父进程创建子进程创建后父进程会立即退出
Typeoneshot一次性进程Systemd 会等当前服务退出再继续往下执行
Typedbus当前服务通过D-Bus启动
Typenotify当前服务启动完毕会通知Systemd再继续往下执行
Typeidle若有其他任务执行完毕当前服务才会运行
ExecStart启动当前服务的命令
ExecStartPre启动当前服务之前执行的命令
ExecStartPost启动当前服务之后执行的命令
ExecReload重启当前服务时执行的命令
ExecStop停止当前服务时执行的命令
ExecStopPost停止当其服务之后执行的命令
RestartSec自动重启当前服务间隔的秒数
Restart定义何种情况 Systemd 会自动重启当前服务可能的值包括always总是重启、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec定义 Systemd 停止当前服务之前等待的秒数
Environment指定环境变量3、修改配置文件后重启
修改配置文件以后需要重新加载配置文件然后重新启动相关服务。
重新加载配置文件
$ sudo systemctl daemon-reload重启相关服务
$ sudo systemctl restart foobar4、服务管理
systemctl start 服务名 开启服务
systemctl stop 服务名 关闭服务
systemctl status 服务名 显示状态
systemctl restart 服务名 重启服务
systemctl enable 服务名 开机启动服务
systemctl disable 服务名 禁止开机启动
systemctl list-units 查看系统中所有正在运行的服务
systemctl list-unit-files 查看系统中所有服务的开机启动状态
systemctl list-dependencies 服务名 查看系统中服务的依赖关系
systemctl mask 服务名 冻结服务
systemctl unmask 服务名 解冻服务
systemctl set-default multi-user.target 开机时不启动图形界面
systemctl set-default graphical.target 开机时启动图形界面修改服务配置文件后需要systemctl daemon-reload设置服务开机自启动systemctl enable postgresql.service查询是否自启动服务systemctl is-enabled postgresql.service取消服务器开机自启动systemctl disable postgresql.service显示某个 Unit 是否正在运行
$ systemctl is-active application.service显示某个 Unit 是否处于启动失败状态
$ systemctl is-failed application.service显示某个 Unit 服务是否建立了启动链接
$ systemctl is-enabled application.service查看每个服务的启动耗时
$ systemd-analyze blame查看当前运行的所有服务
$ systemctl list-units查看服务是否开机启动
$ systemctl list-unit-files这个列表显示每个配置文件的状态一共有四种。
enabled已建立启动链接;表示允许开机启动 disabled没建立启动链接;表示禁止开机启动 static该配置文件没有[Install]部分无法执行只能作为其他配置文件的依赖 masked该配置文件被禁止建立启动链接
显示sshd服务的状态
$ systemctl status sshdLoaded行配置文件的位置是否设为开机启动 Active行表示正在运行 Main PID行主进程ID Status行由应用本身这里是 httpd 提供的软件当前状态 CGroup块应用的所有子进程 日志块应用的日志 Active行:
active(running) 表示程序正在执行; atcive(exited) 执行一次就正常退出的服务,不在系统中执行任何程序; active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行; inactive (dead) 未启动状态;
举例
[rootrhel7 home]# cd /etc/systemd/system/
[rootrhel7 system]# cat wxzc.service[Unit]
Descriptionwxzc service
Afterlibvirtd.service[Service]
Typeforking
ExecStartsh /home/test/zcservice.sh
PrivateTmptrue[Install]
WantedBymulti-user.target参考
https://blog.csdn.net/liuchonghua/article/details/81743606
https://www.cnblogs.com/zwcry/p/9602756.html
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html