You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux检测screen中Python脚本运行状态 未运行则自动启动

AWS Linux环境screen托管Python脚本自动重启监控方案

提供两种实现,优先选择Shell脚本,无额外依赖、资源占用极低。

方案1:Shell监控脚本(推荐)

使用步骤

  • 将下面的脚本内容保存为monitor.sh,建议和目标脚本script.py放在同一目录;如果存放路径不同,修改脚本里PY_SCRIPT_PATH的值为script.py的绝对路径(比如/home/ec2-user/my_project/script.py),避免路径找不到的问题。
  • 给脚本添加执行权限,执行命令:chmod +x monitor.sh
  • 启动监控脚本,建议也放在screen后台运行:执行screen -S monitor_worker ./monitor.sh,之后按Ctrl+A再按D即可detach会话,监控会一直在后台运行。

脚本内容

#!/bin/bash
# 可自行修改配置
SCREEN_NAME="py_script_worker"
PY_SCRIPT_PATH="./script.py"
CHECK_INTERVAL=5

while true; do
    # 同时检测screen会话存在、目标Python进程存活
    if screen -ls | grep -q "$SCREEN_NAME" && pgrep -f "python3 $PY_SCRIPT_PATH" > /dev/null; then
        sleep $CHECK_INTERVAL
    else
        # 清理残留的异常退出同名screen会话
        screen -S "$SCREEN_NAME" -X quit > /dev/null 2>&1
        # 新建后台detached模式的screen会话,启动目标Python脚本
        screen -dmS "$SCREEN_NAME" python3 $PY_SCRIPT_PATH
        sleep $CHECK_INTERVAL
    fi
done

常用操作

  • 要查看脚本运行输出:执行screen -r py_script_worker即可进入对应会话
  • 看完退出会话不要按Ctrl+C(会终止脚本),按Ctrl+A再按D即可detach回到原终端

方案2:Python监控脚本

如果更熟悉Python语法,可使用以下实现,逻辑和Shell版本完全一致。

使用步骤

  • 将脚本保存为monitor_py.py,同样修改PY_SCRIPT_PATH为目标脚本的实际路径
  • 启动脚本:python3 monitor_py.py,建议同样放在screen后台托管运行

脚本内容

import time
import subprocess

# 可自行修改配置
SCREEN_NAME = "py_script_worker"
PY_SCRIPT_PATH = "./script.py"
CHECK_INTERVAL = 5

def check_script_alive():
    # 检测指定screen会话是否存在
    screen_list = subprocess.run(["screen", "-ls"], capture_output=True, text=True).stdout
    screen_alive = SCREEN_NAME in screen_list
    # 检测目标Python进程是否存在
    proc_check = subprocess.run(["pgrep", "-f", f"python3 {PY_SCRIPT_PATH}"], capture_output=True)
    proc_alive = proc_check.returncode == 0
    return screen_alive and proc_alive

while True:
    if check_script_alive():
        time.sleep(CHECK_INTERVAL)
    else:
        # 清理残留异常会话
        subprocess.run(["screen", "-S", SCREEN_NAME, "-X", "quit"], capture_output=True)
        # 新建后台screen启动目标脚本
        subprocess.run(["screen", "-dmS", SCREEN_NAME, "python3", PY_SCRIPT_PATH])
        time.sleep(CHECK_INTERVAL)

补充说明

  • 所有路径优先使用绝对路径,避免执行命令时工作目录不对导致找不到脚本文件
  • 检测间隔默认5秒,可自行修改CHECK_INTERVAL的值调整检测频率
  • 如果需要实例重启后自动启动监控,可将监控脚本的启动命令添加到/etc/rc.local文件中,并给rc.local添加执行权限即可实现开机自启

内容的提问来源于stack exchange,提问作者keynesiancross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:30:55