1
0
md/202510_定时监控vLLM进程.md

142 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 修改vLLM运行gpt-oss-120b的脚本
在 nohup 的启动命令末尾追加如下片段,保存 vLLM 的进程 PID 号。
```
echo $! > /hook/gpt-oss-120b.pid
```
## 创建一个定时任务 bash 脚本
```
vim /hook/timer_bash.sh
```
```
#!/bin/bash
# 目标进程的 PID 文件路径
TARGET_PID_FILE="/hook/gpt-oss-120b.pid"
# tshark_bash 的 PID 文件路径
TSARK_PID_FILE="/hook/tshark_bash.pid"
# tshark_bash 脚本路径
TSARK_SCRIPT_PATH="/hook/tshark_bash.sh"
# tshark_bash 日志文件路径
TSARK_LOG_FILE="/hook/tshark_bash.log"
# shark.log 文件路径
SHARK_LOG_FILE="/hook/shark.log"
# 临时目录下要删除的 pcapng 文件路径模式
PCAPNG_FILES_PATTERN="/tmp/*.pcapng"
# 5分钟检查一次 vllm 进程是否存活
# 若 vllm 进程存活,清理 tshark 的临时文件,然后重启 tshark 脚本继续抓包
# 若 vllm 进程已死亡则 kill tshark 的进程
while true; do
if [[ -f "$TARGET_PID_FILE" ]]; then
TARGET_PID=$(cat "$TARGET_PID_FILE" 2>/dev/null)
if [[ "$TARGET_PID" =~ ^[0-9]+$ ]] && ps -p "$TARGET_PID" > /dev/null 2>&1; then
echo "$(date): 目标进程 (PID: $TARGET_PID) 存活,执行相应操作..."
if [[ -f "$TSARK_PID_FILE" ]]; then
TSHARK_PID=$(cat "$TSARK_PID_FILE" 2>/dev/null)
if [[ "$TSHARK_PID" =~ ^[0-9]+$ ]]; then
kill -9 "$TSHARK_PID" 2>/dev/null
echo "已强制杀死 tshark_bash 进程 (PID: $TSHARK_PID)"
else
echo "tshark_bash.pid 文件内容无效或为空,跳过 kill 操作"
fi
else
echo "tshark_bash.pid 文件不存在,跳过 kill 操作"
fi
if [[ -f "$SHARK_LOG_FILE" ]]; then
rm -rf "$SHARK_LOG_FILE"
echo "已删除 $SHARK_LOG_FILE"
else
echo "$SHARK_LOG_FILE 文件不存在,跳过删除"
fi
if ls $PCAPNG_FILES_PATTERN >/dev/null 2>&1; then
rm -rf $PCAPNG_FILES_PATTERN
echo "已删除 $PCAPNG_FILES_PATTERN 文件"
else
echo "没有找到 $PCAPNG_FILES_PATTERN 文件,跳过删除"
fi
echo "重启 tshark_bash.sh..."
sudo nohup bash "$TSARK_SCRIPT_PATH" >> "$TSARK_LOG_FILE" 2>&1 &
NEW_TSHARK_PID=$!
echo "$NEW_TSHARK_PID" > "$TSARK_PID_FILE"
echo "已启动 tshark_bash.sh新 PID: $NEW_TSHARK_PID已写入 $TSARK_PID_FILE"
else
echo "$(date): 目标进程 (PID: ${TARGET_PID:-未知}) 不存在或已挂掉,执行清理操作..."
if [[ -f "$TSARK_PID_FILE" ]]; then
TSHARK_PID=$(cat "$TSARK_PID_FILE" 2>/dev/null)
if [[ "$TSHARK_PID" =~ ^[0-9]+$ ]]; then
kill -9 "$TSHARK_PID" 2>/dev/null
echo "已强制杀死 tshark_bash 进程 (PID: $TSHARK_PID)"
else
echo "tshark_bash.pid 文件内容无效或为空,跳过 kill 操作"
fi
else
echo "tshark_bash.pid 文件不存在,跳过 kill 操作"
fi
if ls $PCAPNG_FILES_PATTERN >/dev/null 2>&1; then
rm -rf $PCAPNG_FILES_PATTERN
echo "已删除 $PCAPNG_FILES_PATTERN 文件"
else
echo "没有找到 $PCAPNG_FILES_PATTERN 文件,跳过删除"
fi
echo "目标进程已挂掉,已执行清理操作。"
fi
else
echo "$(date): 目标 PID 文件 $TARGET_PID_FILE 不存在,跳过本次检查。"
fi
sleep 300
done
```
## 定时任务
##### 第一次运行先赋权
```
chmod +x vim /hook/timer_bash.sh
```
##### 运行
```
sudo nohup /hook/timer_bash.sh > /hook/timer_bash.log 2>&1 & echo $! > /hook/timer_bash.pid
```
##### 停止
```
kill $(cat /hook/timer_bash.pid)
```
## 抓包脚本
##### 运行
```
sudo nohup bash /hook/tshark_bash.sh >> /hook/tshark_bash.log 2>&1 & echo $! > /hook/tshark_bash.pid
```
##### 停止
```
kill -9 $(cat /hook/tshark_bash.pid)
```