树莓派Zero W开机自启服务出现nmap模块NotFound错误求助
问题解决:Systemd服务启动Python脚本找不到nmap模块
核心原因
systemd默认以root身份运行服务,其使用的Python环境与你手动执行脚本时(pi用户)的环境不一致,导致安装在用户目录的Python模块无法被服务进程识别。
解决方案
1. 让服务以pi用户身份运行
修改你的systemd服务文件,在[Service]段添加User=pi,强制服务使用和手动执行相同的用户环境:
[Unit] Description=Service for Pi Zero Agent. Github: After=multi-user.target [Service] Type=simple User=pi ExecStart= /usr/bin/python3 /github/scripts/run.py Restart=on-abort [Install] WantedBy=multi-user.target
保存后执行以下命令生效:
sudo systemctl daemon-reload sudo systemctl restart <你的服务名称>.service
2. 指定服务使用手动执行的Python路径
先查看你手动运行脚本时使用的Python路径:
which python3
假设输出为/home/pi/.local/bin/python3,修改服务文件的ExecStart为该路径:
ExecStart= /home/pi/.local/bin/python3 /github/scripts/run.py
同样执行daemon-reload和重启服务的命令。
3. 确认nmap模块安装在服务使用的Python环境中
如果服务用root身份运行,执行以下命令检查并安装模块:
sudo python3 -m pip list | grep nmap # 如果没有输出,执行安装 sudo python3 -m pip install python-nmap
如果服务用pi用户运行,执行:
python3 -m pip list | grep nmap # 无输出则安装 python3 -m pip install python-nmap
注意:系统的nmap工具(sudo apt install nmap)和Python的nmap模块是两个独立的东西,必须通过pip安装python-nmap才能在脚本中导入使用。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

