当前位置: 首页 > news >正文

如何构建网站新手如何搭建网站

如何构建网站,新手如何搭建网站,企业网站内容是什么,优秀网站建设最新报价1. 背景 程序使用Jenkins发布,启动用户是普通用户。有时会在服务器上直接重启程序,使用“sudo -u 普通用户 程序”执行时,会产生两个进程一个是"sudo -u …"的父进程,一个是“程序”的子进程。为了不混淆研发&#xff0…

1. 背景

程序使用Jenkins发布,启动用户是普通用户。有时会在服务器上直接重启程序,使用“sudo -u 普通用户 程序”执行时,会产生两个进程一个是"sudo -u …"的父进程,一个是“程序”的子进程。为了不混淆研发,所以修改重启脚本,执行后只保留子进程。

2. 现象

  1. 普通用户执行sleep命令
sudo -u control sleep 20
  1. 查看sleep进程
# 查看命令
ps -ef | grep sleep | grep -v grep
# 看到两个进程
root     20043 19956  0 10:42 pts/0    00:00:00 sudo -u control sleep 20
control  20044 20043  0 10:42 pts/0    00:00:00 sleep 20
  • 父进程是root执行的,进程ID=20043
  • 子进程是普通用户control执行的,父进程ID=20043

3. 解决

  1. 使用bash -c和disown解决
sudo -u control bash -c "sleep 20 & disown"
  1. 查看sleep进程
# 查看命令
ps -ef | grep sleep | grep -v grep
# 看到只有1个进程
control  20167     1  0 10:54 pts/0    00:00:00 sleep 20

4. 说明

bash -c 结合 disown 是一种在 Linux 中启动后台进程并使其与当前 shell 分离的有效方法

4.1 基本概念

  1. bash -c 命令
    bash -c “command” 允许您直接在命令行中执行一段 Bash 脚本,而不需要先创建一个脚本文件。

  2. disown 命令
    disown 是 Bash 的内置命令,用于从当前 shell 的作业表中移除作业,使它们不再接收 SIGHUP 信号(当终端关闭时发送的信号)。

4.2 工作原理

使用 bash -c “command & disown” 时:

  1. bash -c 启动一个新的 Bash 子 shell
  2. 在这个子 shell 中,command & 将命令置于后台运行
  3. disown 立即将这个后台作业从子 shell 的作业表中移除
  4. 子 shell 退出,但后台进程继续运行,其父进程变为 init (PID 1)

5. 样例

  1. 脚本目录结构
[root@centos7 kol-backend]# tree
.
├── bak
├── lib
├── script
│   └── restart.sh
└── sourcecode
  • kol-backend:程序主目录
    • bak子目录:启动成功后备份目录;
    • lib子目录: Jenkins推送压缩包目录;
    • script子目录:重启脚本目录;
    • sourcecode子目录:程序运行目录;

注意:程序主目录及子目录的属主都是程序运行的普通用户

  1. 重启脚本
cat restart.sh
#!/bin/bash
#######################################################
# 脚本用于重启程序
# 使用前需要定义程序路径和变量
# 使用前需要修改启动程序命令,例如java路径和启动的普通账号
######################################################## 定义程序路径和变量
APP_HOME="/public/application/kol-backend"
APP_NAME="kol-job.jar"
CONF_NAME="shared-config.tar.gz"
ENV_NAME="kol-prod"
# lib子目录: Jenkins推送压缩包目录; bak子目录:启动成功后备份目录; sourcecode子目录:运行程序目录; script子目录:重启脚本目录# 当前登录用户
CURRENT_USER=$(id -un)   
# 获取当前时间
CURRENT_TIME=$(date +"%Y%m%d%H%M%S")
# 当前目录下创建脚本日志目录
mkdir -p logs# 获取脚本名称
SCRIPT_FULL_NAME=$(basename "$0")
# 移除最后一个点及其后的所有字符
SCRIPT_NAME="${SCRIPT_FULL_NAME%.*}"
# 定义脚本日志文件
LOG_FILE=logs/${SCRIPT_NAME}_${CURRENT_TIME}.logDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\n $DATE_TIME: #### Begin ####" >> $LOG_FILE# 1. 使用root账号停服务
# 获取运行程序进程的PID
PID=$(sudo ps -ef | grep "$APP_HOME/sourcecode/$APP_NAME" | grep -v grep | awk '{print $2}');
# 将获取的旧进程PID结果写入日志 
[ -n "$PID" ] && echo -e "\n $APP_NAME OLD $PID">>$LOG_FILE || echo -e "\n $APP_NAME PID为空">>$LOG_FILE;
# 正常停止进程 
[ -n "$PID" ] && sudo kill $PID && echo -e "\n $APP_NAME 开始停止">>$LOG_FILE;# 2. 检查进程PID是否存在,30秒后强杀
# 连续30秒检查进程PID是否存在,PID不存在退出循环
[ -n "$PID" ] && for i in {1..30}; do sudo kill -0 $PID 1>/dev/null || break; sleep 1; done;
# 超过30秒后,仍然存在进程PID,启动强杀 
sudo kill -0 $PID 2>/dev/null && sudo kill -9 $PID >/dev/null && echo -e "\n $APP_NAME 启用强杀">>$LOG_FILE
sudo sleep 10
# 检查进程是否停止,写入日志(这里没考虑强杀不成功的情况)
sudo kill -0 $PID 2>/dev/null || echo -e "\n $APP_NAME 停止成功">>$LOG_FILE# 3. 当前用户启动APP程序
# 进入程序目录,使用普通用户启动程序(bash -c 和 disown)
cd $APP_HOME/sourcecode  && sudo -u control bash -c "nohup /usr/local/jvm/java21/bin/java -Xms16g -Xmx32g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof  -Dspring.profiles.active=$ENV_NAME -Dspring.config.additional-location=file:$APP_HOME/sourcecode/shared-config/ -jar $APP_HOME/sourcecode/$APP_NAME > $APP_HOME/sourcecode/nohup.out 2>&1 & disown"
sudo sleep 20# 4. 判断是否启动成功
PID=$(sudo ps -ef | grep "$APP_HOME/sourcecode/$APP_NAME" | grep -v grep | awk '{print $2}'); # 5. 如果成功备份jar包
if [ -n "$PID" ]; then# 新进程PID写入日志echo -e "\n $APP_NAME NEW $PID">>$LOG_FILE;echo -e "\n $APP_HOME 启动成功">>$LOG_FILE; 
else echo -e "\n $APP_HOME 启动失败">>$LOG_FILE; 
fiDATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\n $DATE_TIME: #### Finish ####" >>$LOG_FILE
http://www.dtcms.com/a/416233.html

相关文章:

  • c++ 之 基类与派生类的转换
  • 一次跨界学习的探索:用流水线的方式攻克行业知识的尝试
  • 免费建立属于自己的网站做网站成都哪家公司最好
  • 网页设计制作网站开发建设新手建站基础入门到精通视频教程李光辉:营销型企业网站建设的指导思想是什么?
  • 二手表网站wordpress4.8漏洞
  • 电脑防护一键关闭工具V1.0
  • 手机网站开发流程网页传奇私
  • 【贪心 树状数组】P9310 [EGOI 2021] Luna likes Love / 卢娜爱磕 cp|普及+
  • 百度一下官方网站wordpress第三方订阅地址
  • Windows 已占 VT-x 的终极排查与根治手册
  • leetcode解题思路分析(一百六十七)1445 - 1451 题
  • 网站建设中的端口wordpress增加友情链接
  • Python实现SQL语句自动转换工具(UPDATE到INSERT)
  • 找网站建设公司好php制作网站
  • 建设银行网银官方网站通州企业网站建设
  • 《Python中的适配器模式实战:让第三方库优雅融入你的系统》
  • 深圳私人做网站做venn图的网站
  • 网站搭建设计 是什么中国建设银行网站首页旧版
  • 做网站vpn多大内存网站策划资料方案
  • 注册网站域名平台南通外贸建站
  • 打工人日报#20250927
  • 做网站的系统功能需求贵阳网站优化
  • 【C#】.NET开发中30秒判断该用 IEnumerable 还是 IQueryable
  • 南宁手机网站设计策划今天发生的重大新闻事件
  • 网站开发的源码html基本结构代码
  • 公司做网站需要哪些步骤俄语网站设计
  • 软件测试-性能测试⼯具篇(沉淀中)
  • 雄安专业网站建设电话室内装修效果图
  • 电子网站建设方案世界500强企业愿景
  • 回溯算法的思路总结