84 lines
1.9 KiB
Plaintext
84 lines
1.9 KiB
Plaintext
# /data/sh/start_tk_regio.sh
|
||
|
||
# crontab -e
|
||
# 0 9 * * * /data/sh/start_tk_regio.sh
|
||
|
||
#!/bin/bash
|
||
|
||
# 定义变量
|
||
APP_DIR="/data/webapps/test_tk_region"
|
||
LOG_FILE="$APP_DIR/sh.log"
|
||
PYTHON_SCRIPT="tk_region.py"
|
||
MAX_ATTEMPTS=10
|
||
WAIT_TIME=600 # 10分钟,单位为秒
|
||
|
||
# 记录日志函数
|
||
log() {
|
||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
||
}
|
||
|
||
# 切换到应用目录
|
||
log "==========="
|
||
log "切换到应用目录: $APP_DIR"
|
||
cd "$APP_DIR" || {
|
||
log "无法切换到应用目录 $APP_DIR,脚本退出"
|
||
exit 1
|
||
}
|
||
|
||
# 检查是否有旧进程在运行
|
||
attempt=1
|
||
while [ $attempt -le $MAX_ATTEMPTS ]; do
|
||
# 查找正在运行的Python脚本进程
|
||
log "第 $attempt 次检查是否有旧进程在运行..."
|
||
pid=$(ps aux | grep "$PYTHON_SCRIPT" | grep -v grep | awk '{print $2}')
|
||
|
||
if [ -z "$pid" ]; then
|
||
log "未发现运行中的 $PYTHON_SCRIPT 进程,准备启动新进程"
|
||
break
|
||
else
|
||
log "发现运行中的进程,PID: $pid"
|
||
if [ $attempt -eq $MAX_ATTEMPTS ]; then
|
||
log "已达到最大等待次数 ($MAX_ATTEMPTS),仍有进程在运行,放弃启动"
|
||
exit 1
|
||
fi
|
||
log "等待 $((WAIT_TIME/60)) 分钟后再次检查..."
|
||
sleep $WAIT_TIME
|
||
attempt=$((attempt + 1))
|
||
fi
|
||
done
|
||
|
||
# 激活路径
|
||
log "激活conda路径"
|
||
source ~/.bashrc || {
|
||
log "激活conda激活路径失败"
|
||
exit 1
|
||
}
|
||
|
||
# 激活环境
|
||
log "激活conda环境 py310"
|
||
conda activate py310 || {
|
||
log "激活conda环境失败"
|
||
exit 1
|
||
}
|
||
|
||
log "激活虚拟环境"
|
||
source venv/bin/activate || {
|
||
log "激活虚拟环境失败"
|
||
exit 1
|
||
}
|
||
|
||
# 安装依赖
|
||
log "安装依赖包"
|
||
pip install -r requirements.txt || {
|
||
log "安装依赖包失败"
|
||
exit 1
|
||
}
|
||
|
||
# 启动Python脚本
|
||
log "启动 $PYTHON_SCRIPT 脚本"
|
||
nohup python "$PYTHON_SCRIPT" > output.log 2>&1 &
|
||
pid=$!
|
||
log "$PYTHON_SCRIPT 已启动,PID: $pid"
|
||
|
||
log "脚本执行完成"
|