如何通过命令启动screen会话并运行Python脚本,现有执行命令不生效怎么解决?
问题解决方案
- 第一步:先确认screen工具已安装
多数Linux最小化安装环境默认未预装screen,执行对应命令安装即可:
Debian/Ubuntu系:apt update && apt install -y screen
CentOS/RHEL系:yum install -y screen - 第二步:排查命令执行报错
screen的-d -m参数启动后会直接进入后台模式,如果内部执行的命令报错退出,会话会自动销毁,无法通过screen -ls查到,可添加日志参数排查具体错误:
执行后查看对应日志文件即可定位是Python环境缺失、脚本路径错误、依赖未安装等具体问题。cd /home/project1 && screen -L -Logfile ./project1_screen.log -dmS project1 python3 project1.py - 第三步:全路径写死避免环境变量差异
bash脚本执行时的PATH变量和交互式登录shell的PATH可能存在差异,建议所有命令、文件都写绝对路径,可先执行which python3获取Python解释器的绝对路径,例如返回/usr/bin/python3,则修改命令为:cd /home/project1 && screen -dmS project1 /usr/bin/python3 /home/project1/project1.py - 第四步:确认会话查询权限
如果执行bash脚本的用户和你查询screen会话的用户不一致,会看不到对应会话,比如用root执行脚本后用普通用户执行screen -ls就查不到,需要切换到对应执行用户或者加sudo执行screen -ls查看。 - 可用完整脚本示例
#!/bin/bash # 配置全局参数,根据实际情况修改 PYTHON_BIN="/usr/bin/python3" PROJ1_DIR="/home/project1" PROJ2_DIR="/home/project2" # 启动项目1 cd "${PROJ1_DIR}" || exit 1 screen -L -Logfile ./run.log -dmS project1 "${PYTHON_BIN}" project1.py # 启动项目2 cd "${PROJ2_DIR}" || exit 1 screen -L -Logfile ./run.log -dmS project2 "${PYTHON_BIN}" project2.py # 打印会话列表验证启动结果 echo "已启动screen会话列表:" screen -ls
内容的提问来源于stack exchange,提问作者2pacshake
相关产品推荐
相关产品推荐

