服务器Python监控程序排查与手动执行指南|venv虚拟环境依赖问题解决

4

一、问题现象

在服务器手动运行食品生产许可监控脚本时,系统抛出依赖缺失错误:

ModuleNotFoundError: No module named 'pandas'

同时怀疑服务器已有其他监控程序在后台运行,需要排查确认。

二、进程排查与定位

通过ps aux命令查看所有Python进程,发现关键信息:

foodmon  2698676  0.0  0.2 1220400 9176 ?  Ssl  May06  0:13 /www/wwwroot/food-monitor/venv/bin/python /www/wwwroot/food-monitor/monitor.py

核心发现如下:

  • 运行用户:foodmon(非root)

  • 进程ID:2698676(5月6日启动,已常驻后台)

  • Python路径:venv/bin/python(虚拟环境,非系统python3)

  • 脚本路径:/www/wwwroot/food-monitor/monitor.py

目录下另有一份monitor-副本.py备份文件,容易误认为是双程序运行。

三、根因分析

手动执行python3 monitor.py时调用的是系统默认Python环境,未安装pandas等依赖;而后台常驻进程使用的是项目自带的venv虚拟环境,该环境已完整安装requests、pandas、ddddocr等全部依赖包。

四、强制手动执行方案

当错过调度时间(BASE_HOURS设定的8-19点区间)后,可通过直接调用类方法绕过调度器:

4.1 前台单次执行

cd /www/wwwroot/food-monitor
./venv/bin/python -c "from monitor import HN_Monitor; HN_Monitor().run_once()"

4.2 后台执行并记录日志

cd /www/wwwroot/food-monitor
nohup ./venv/bin/python -c "from monitor import HN_Monitor; HN_Monitor().run_once()" >> manual_run.log 2>&1 &
tail -f manual_run.log

五、常用运维命令汇总

日常维护中建议掌握以下指令:

  • 查看进程ps aux | grep monitor | grep -v grep

  • 停止旧进程kill 2698676(请替换为实际PID)

  • 查看日志tail -f monitor.log

  • 进入虚拟环境source venv/bin/activate

六、总结

服务器Python项目建议使用虚拟环境隔离依赖,排查时应优先检查ps aux中的完整命令路径。对于带调度逻辑的监控脚本,直接导入模块并调用run_once()是最稳妥的手动触发方式,既不影响现有常驻进程,又能立即获取最新数据。

网友评论

访客信息

你已经3分钟没有访问该网站

这些可能是你需要的内容: