Administrator
发布于 2025-11-26 / 10 阅读
0

解决 Jupyter Lab systemd 服务启动失败(203/EXEC 错误)完整指南

在 Ubuntu 上用 systemd 跑 Jupyter Lab,配完之后 systemctl start jupyter,一看状态:


Active: activating (auto-restart) (Result: exit-code)
Process: 4301 ExecStart=.../jupyter lab ... (code=exited, status=203/EXEC)

203/EXEC 翻译成人话就是「systemd 找不到你要执行的那个文件」。但文件明明在那,which jupyter 也能找到。问题出在 conda——systemd 压根没加载 conda 的环境变量。

问题在哪

systemd 服务文件跑在一个极简环境里,不读 .bashrc、不读 .profile、不认 conda init。直接写 ExecStart=/home/c3c3c3/miniconda3/bin/jupyter lab 看着路径对了,但 jupyter 启动时需要 conda 环境里的 Python 和依赖,这些 systemd 都找不到。

修好的 service 文件


[Unit]
Description=JupyterLab
After=network.target
Wants=network.target

[Service]
Type=simple
User=c3c3c3
Group=c3c3c3
WorkingDirectory=/home/c3c3c3
Environment=PATH=/home/c3c3c3/miniconda3/bin:/usr/local/bin:/usr/bin:/bin
Environment=PYTHONPATH=/home/c3c3c3/miniconda3/lib/python3.12/site-packages
ExecStart=/home/c3c3c3/miniconda3/bin/jupyter lab --ip=0.0.0.0 --port=8888 --no-browser
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

关键在 Environment=PATH——显式把 miniconda3/bin 放在最前面。PYTHONPATH 也要显式指定,不然 import 依赖时会报错。

装上去


sudo nano /etc/systemd/system/jupyter.service  # 贴入上面内容
sudo systemctl daemon-reload
sudo systemctl enable --now jupyter.service
sudo systemctl status jupyter.service

跑起来之后验证:


sudo journalctl -u jupyter.service -f  # 看日志
ss -tlnp | grep 8888                    # 确认端口

排错技巧

如果还是失败,先用服务的用户身份手动跑一遍命令:


sudo -u c3c3c3 /home/c3c3c3/miniconda3/bin/jupyter lab --ip=0.0.0.0 --port=8888 --no-browser

手动能跑、systemd 跑不了,说明还是个环境变量的问题——看看是不是 PYTHONPATH 里 python 版本号不对,或者 conda env 名字写错了。

总结

conda + systemd 的兼容问题就一层窗户纸:systemd 不认识 conda,你得手动把所有路径喂给它。配过一次之后套用到其他 conda 应用就都一样的套路了。