? ? ? ? ?现在的程序员往往不再是单独的程序员,还需同时维护项目运行的服务器状态,这里记录一些使用频率较高的运维脚本。
按时间条件删除历史日记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 & (带日志)
结合以上示例,下面是这个命令的详细解释:
nohup:
nohup
?是 "no hang up" 的缩写。它用于运行命令,在您退出帐户/终端后,该命令将继续运行。通常,当您从 shell 启动一个程序并关闭终端时,该程序也会收到一个挂断(HUP)信号并终止。使用?nohup
?可以防止这种情况。python3 -u run.py:
python3
:这是 Python 3 的解释器命令。-u
:这个选项使得 Python 的输出是无缓冲的,这意味着输出会立即显示,而不是等待缓冲区满或者程序结束。run.py
:这是要运行的 Python 脚本。> nohup.log:
python3 -u run.py
?的标准输出(stdout)重定向到名为?nohup.log
?的文件。如果文件不存在,它会被创建;如果文件已存在,它的内容会被覆盖。2>&1:
nohup.log
,所以 stderr 也会被重定向到同一个文件。&:
综上所述,这个命令的意思是:“在后台运行?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的性能。