代码之家  ›  专栏  ›  技术社区  ›  Simone

Python脚本无法通过systemctl.service文件工作

  •  -1
  • Simone  · 技术社区  · 2 年前

    我正在尝试设置一个简单的脚本,以便使用systemctl计时器运行。

    为了测试.service文件是否有效,我启动它: sudo systemctl start mioScript.service 但什么也没发生。如果我检查状态:

    mioScript.service - Myscript
         Loaded: loaded (/etc/systemd/system/mioScript.service; disabled; vendor preset: enabled)
         Active: failed (Result: exit-code) since Sat 2024-04-13 14:38:57 CEST; 7s ago
    TriggeredBy: ● mioScript.timer
        Process: 3804 ExecStart=/usr/bin/python3 /home/user/main.py (code=exited, status=1/FAILURE)
       Main PID: 3804 (code=exited, status=1/FAILURE)
            CPU: 58ms
    
    Apr 13 14:38:57 server systemd[1]: Started Mio.
    Apr 13 14:38:57 server python3[3804]: Traceback (most recent call last):
    Apr 13 14:38:57 server python3[3804]:   File "/home/user/main.py", line 1, in <module>
    Apr 13 14:38:57 server python3[3804]:     from requests import Request, Session
    Apr 13 14:38:57 server python3[3804]: ModuleNotFoundError: No module named 'requests'
    Apr 13 14:38:57 server systemd[1]: mioScript.service: Main process exited, code=exited, status=1/FAILURE
    Apr 13 14:38:57 server systemd[1]: mioScript.service: Failed with result 'exit-code'.
    

    但如果我打开一个终端并键入: /usr/bin/python3 /home/user/main.py 剧本写得很好。

    我不明白为什么通过systemctl.service文件启动脚本时找不到Python的请求模块(该模块已经安装在计算机上)。 我是否正确启动了脚本?还是我应该用另一种方式启动它?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Toby Speight    2 年前

    我不确定你在脚本文件中到底写了什么。但它看起来像是环境冲突,所以你可以尝试两种通用的方法来解决它。

    1. 在环境变量中设置PYTHONPATH。

      在.service文件中,尝试添加 Environment="PYTHONPATH=path/to/modules" .

    2. 使用虚拟环境。

      尝试添加 ExecStart=/path/to/your/venv/bin/python3 /home/user/main.py 并提前在环境中安装所有依赖项。