linux centos 常用运维指令脚本记录

         现在的程序员往往不再是单独的程序员,还需同时维护项目运行的服务器状态,这里记录一些使用频率较高的运维脚本。

空间释放-项目日记清除

按时间条件删除历史日记bash脚本。注意修改项目文件日记目录和保留日记时间

// 按修改日记保留最近3个月的日记,其它的删除.


#!/bin/bash

# 指定日志文件所在的目录
log_directory="/opt/kyc/logs"

# 获取当前日期并计算三个月前的日期
current_date=$(date +%Y%m%d)
three_months_ago=$(date -d "3 months ago" +%Y%m%d)

# 遍历日志目录中的文件
for file in $log_directory/*; do
  # 获取文件的最后修改时间
  modified_time=$(stat -c %Y "$file")

  # 将最后修改时间转换为日期格式
  modified_date=$(date -d "@$modified_time" +%Y%m%d)

  # 检查修改时间是否在最近三个月内
  if [[ $modified_date -ge $three_months_ago && $modified_date -le $current_date ]]; then
    # 保留文件
    echo "保留文件: $file"
  else
    # 删除文件
    rm "$file"
    echo "删除文件: $file"
  fi
done

实时监控服务器资源与通知

通过以下python脚本实现实时监控服务器资源并通知,用到了psutil,需要安装pip3 install psutil

import psutil
import requests
import time

# 设定阈值
disk_threshold = 90
mem_threshold = 90
cpu_threshold = 50

# DingTalk webhook地址
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=caxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 请替换为实际的webhook地址

def send_dingtalk(title, message):
    message = title + '->' + message
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    response = requests.post(webhook_url, json=data)
    print(response.json())

def monitor_disk_usage():
    disk_usage = psutil.disk_usage('/')
    if disk_usage.percent > disk_threshold:
        send_dingtalk("硬盘使用率过高", f"硬盘使用率已达{disk_usage.percent}%")

def monitor_memory_usage():
    memory_usage = psutil.virtual_memory()
    if memory_usage.percent > mem_threshold:
        send_dingtalk("内存使用率过高", f"内存使用率已达{memory_usage.percent}%")

def monitor_cpu_usage():
    cpu_usage = psutil.cpu_percent(interval=1)
    if cpu_usage > cpu_threshold:
        send_dingtalk("CPU使用率过高", f"CPU使用率已达{cpu_usage}%")

send_dingtalk("start","server mon start ok")
while True:
    monitor_disk_usage()
    monitor_memory_usage()
    monitor_cpu_usage()
    time.sleep(60)  # 每分钟检查一次

项目发布(重启项目)

        这里是java项目,现在很多项目基本采用springboot框架可以直接打包生成jar可运行包,上传服务器即可运行。

#!/bin/bash

#定义变量
APP_NAME=AppXcxService.jar
LOG_NAME=AppXcx.log
NEW_JAR=kyc-xcx-0.0.1-RELEASE.jar


#备份文件夹
BACKUP_DIR=/home/bak
PROD_DIR=/home/

#创建备份目录
if [ -d $BACKUP_DIR ]; then
    echo "备份目录: ${BACKUP_DIR}"
else
    echo "目录不存在,创建备份目录: ${BACKUP_DIR}"
    mkdir -p $BACKUP_DIR
fi


# 检测新的上传文件是否存在
if [ -e $PROD_DIR$NEW_JAR ]; then
    echo "检测新的上传文件"


    if [ -e $PROD_DIR$APP_JAR ]; then

            echo "比较新文件与当前运行文件是否相同"


            file1=$PROD_DIR$NEW_JAR
            file2=$PROD_DIR$APP_NAME
            if cmp -s $file1 $file2
               then
               echo "新文件与当前文件运行一致,不执行更新!"
               exit 0
            fi
    fi
else
    echo "新文件不存在,退出执行!!!"
    exit 0
fi


# 停止旧版本应用的进程
echo "Stopping old process..."
pid=$(ps -ef | grep "$APP_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]
then
        echo "结束运行的 \"${APP_NAME}\""
    kill -9 "$pid"
fi


timestamp=$(date +%Y%m%d%H%M%S)

if [ -e $PROD_DIR$APP_NAME ]
then
    echo "执行备份运行JAR文件"
    # 备份旧版本 JAR 包
    cp ${PROD_DIR}${APP_NAME} ${BACKUP_DIR}/${APP_NAME}${timestamp}
echo "备份JAR完成"
fi


if [ -e $PROD_DIR$LOG_NAME ]
then
    echo "执行备份运行log文件"
    # 备份旧版本 JAR 包
    cp ${PROD_DIR}${LOG_NAME} ${BACKUP_DIR}/${LOG_NAME}${timestamp}
echo "备份log完成"
fi



cd $PROD_DIR
mv $NEW_JAR $APP_NAME

echo "Starting new process..."

nohup java -Xms512m -Xmx512m -jar $APP_NAME --spring.profiles.active=pro > $LOG_NAME &
echo "ok"
tail -f $LOG_NAME

后台运行

  正确运行后台运行python或java等程序,关闭终端仍然可运行

nohup python3 -u run.py > nohup.log 2>&1 &

nohup gunicorn -w 4 -b 0.0.0.0:8001 pyFileName:app & (不带日志)
nohup gunicorn -w 4 -b 0.0.0.0:8001 run:app > gunicorn.log 2>&1 & (带日志)

结合以上示例,下面是这个命令的详细解释:

  1. nohup

    • nohup 是 "no hang up" 的缩写。它用于运行命令,在您退出帐户/终端后,该命令将继续运行。通常,当您从 shell 启动一个程序并关闭终端时,该程序也会收到一个挂断(HUP)信号并终止。使用 nohup 可以防止这种情况。
  2. python3 -u run.py

    • python3:这是 Python 3 的解释器命令。
    • -u:这个选项使得 Python 的输出是无缓冲的,这意味着输出会立即显示,而不是等待缓冲区满或者程序结束。
    • run.py:这是要运行的 Python 脚本。
  3. > nohup.log

    • 这部分将 python3 -u run.py 的标准输出(stdout)重定向到名为 nohup.log 的文件。如果文件不存在,它会被创建;如果文件已存在,它的内容会被覆盖。
  4. 2>&1

    • 这是 shell 重定向的一个技巧。它表示将标准错误(stderr,文件描述符为 2)重定向到标准输出(stdout,文件描述符为 1)。因为前面已经将 stdout 重定向到 nohup.log,所以 stderr 也会被重定向到同一个文件。
  5. &

    • 这个符号将命令放到后台执行。也就是说,当你执行这个命令时,它不会阻塞你的终端或 shell,你可以立即得到命令提示符并继续输入其他命令。

综上所述,这个命令的意思是:“在后台运行 python3 -u run.py,即使我关闭了终端也不要停止它,并将所有的输出(无论是正常的输出还是错误的输出)都记录到 nohup.log 文件中。”

         gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,它使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。Gunicorn服务器作为wsgi app的容器,能够与各种Web框架兼容(flask,django等),得益于gevent等技术,使用Gunicorn能够在基本不改变wsgi app代码的前提下,大幅度提高wsgi app的性能。

你可能感兴趣的:(linux,centos,运维)