一、问题现象
在服务器手动运行食品生产许可监控脚本时,系统抛出依赖缺失错误:
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()是最稳妥的手动触发方式,既不影响现有常驻进程,又能立即获取最新数据。