我正在systemctl
为需要openvino
初始化环境的 python 脚本创建服务。在运行 python 脚本之前,我们必须初始化openvino
环境,并且必须从同一个终端运行 python 脚本才能运行它,否则会抛出错误。我为此创建了以下服务:
[Unit]
Description=Launch application
[Service]
User=john
WorkingDirectory=/home/thingtrax/Documents/ThingTraxVisionPython
Environment=DISPLAY=:0
ExecStartPre=/opt/intel/openvino/bin/setupvars.sh
ExecStart=/usr/bin/python3 /home/john/Documents/ThingTraxVisionPython/rtsp_ttfr.py
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=graphical.target
现在根据我的理解,我正在使用ExecStartPre
初始化 openvino 环境。OpenVino 环境不能用 root 用户初始化,因为我们通常使用 root 运行 systemctl 服务,这就是为什么 python 脚本给出与未初始化环境相关的错误。
有什么方法可以提到要在 john 用户下运行的所有内容。请帮忙。谢谢
编辑:了解实际问题后
基于 OpenVINO 文档:安装适用于 Linux 的英特尔® Distribution of OpenVINO™ toolkit。
创建一个包含两个命令的脚本:
然后从您的服务文件中调用此脚本:
第一个版本
我不完全理解您的问题,但是如果您需要以 root 身份运行 openvino 服务并且仅以 John 身份运行 ExecStartPre,您可以创建一个以 John 身份登录并从 ExecStartPre 启动的 shell 脚本:
注意:不要忘记末尾的最后一个破折号,它将设置 John 环境变量。
然后为其添加执行权限:
结束,这里是之后的服务文件:
由于 systemctl 以 root 身份运行,您可以使用 sudo 切换到另一个用户而无需密码提示。例子: