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

求助:Monit重启Python程序时无法识别已安装的psutil库

Monit重启Python程序时找不到已安装库的解决方法

问题背景

在WSL环境下用sudo运行Monit监控Python程序,手动在终端能正常启动程序,但Monit重启时提示找不到已安装的psutil库,相关日志与配置如下:

Monit错误日志

[2023-02-07T11:33:11-0800] error    : 'PythonCrashTest' failed to restart (exit status 1) -- '/mnt/c/Users/ARSialer/Desktop/monitTest/main.py start': Traceback (most recent call last):
  File "/mnt/c/Users/ARSialer/Desktop/monitTest/main.py", line 4, in <module>
    import psutil
ModuleNotFoundError: No module named 'psutil'

Monit配置(monitrc)

check process PythonCrashTest with pidfile /mnt/c/Users/ARSialer/Desktop/monitTest/test.pid
        start = "/mnt/c/Users/ARSialer/Desktop/monitTest/main.py" with timeout 3 seconds
        restart =  "/mnt/c/Users/ARSialer/Desktop/monitTest/main.py"  with timeout 3 seconds

Python脚本shebang

#!/usr/bin/env python3

问题原因

sudo运行Monit时使用的是root用户的环境变量,和普通用户的Python环境不一致:你在普通终端安装的psutil属于用户级Python环境,而root用户的Python环境无法识别;另外#!/usr/bin/env python3在sudo环境下可能指向系统级Python,而非你日常使用的用户级Python。

解决方案

1. 使用Python解释器的绝对路径(推荐)

  • 先在普通用户终端执行命令,找到你常用的Python3路径:

    which python3
    

    输出示例:/home/your_username/.local/bin/python3(替换为你的实际路径)

  • 方案A:修改Python脚本的shebang
    将脚本开头的#!/usr/bin/env python3替换为刚才得到的绝对路径:

    #!/home/your_username/.local/bin/python3
    

    保存后确保脚本有执行权限:

    chmod +x /mnt/c/Users/ARSialer/Desktop/monitTest/main.py
    
  • 方案B:修改Monit的启动命令
    在monitrc里直接用绝对路径的Python运行脚本:

    check process PythonCrashTest with pidfile /mnt/c/Users/ARSialer/Desktop/monitTest/test.pid
            start = "/home/your_username/.local/bin/python3 /mnt/c/Users/ARSialer/Desktop/monitTest/main.py" with timeout 3 seconds
            restart =  "/home/your_username/.local/bin/python3 /mnt/c/Users/ARSialer/Desktop/monitTest/main.py"  with timeout 3 seconds
    
  • 验证:用sudo执行该绝对路径的Python,测试是否能导入psutil:

    sudo /home/your_username/.local/bin/python3 -c "import psutil; print('success')"
    

    输出success则说明配置有效。

2. 将库安装到root用户的Python环境

直接用sudo安装psutil,让root环境能识别该库:

sudo pip3 install psutil

这种方法操作简单,但如果程序依赖多个用户级库,需要逐个安装到系统/root环境。

3. 让sudo保留普通用户的环境变量

修改Monit的启动命令,用sudo -E保留当前用户的环境(需确保sudoers配置允许):

check process PythonCrashTest with pidfile /mnt/c/Users/ARSialer/Desktop/monitTest/test.pid
        start = "sudo -E /mnt/c/Users/ARSialer/Desktop/monitTest/main.py" with timeout 3 seconds
        restart =  "sudo -E /mnt/c/Users/ARSialer/Desktop/monitTest/main.py"  with timeout 3 seconds

注意:这种方法可能存在安全风险,需谨慎使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:20:38