脚本 - 如何在启动systemctl服务之前运行命令

分享于 

3分钟阅读

ubuntu

  繁體

问题:

在运行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




答案1:

作为systemctl以root身份运行,你可以使用sudo切换到其他用户,例如:


root@leo-pc:~# sudo -u leonid bash


leonid@leo-pc:~$ 




答案2:

根据openvino文档,创建一个包含两个命令的脚本:


#!/bin/bash


## /yourscript.sh


source /opt/intel/openvino/bin/setupvars.sh


/usr/bin/python3 /home/john/Documents/ThingTraxVisionPython



然后从服务文件中调用此脚本:


[Unit]


Description=Launch application



[Service]


User=john


WorkingDirectory=/home/thingtrax/Documents/ThingTraxVisionPython


Environment=DISPLAY=:0


ExecStart=/yourscript.sh


Restart=on-failure


RestartSec=30s



[Install]


WantedBy=graphical.target



第一个版本

如果你需要openvino服务以根用户身份运行,而ExecStartPre仅以John身份运行,那么你可以创建一个shell脚本,以John身份登录并从ExecStartPre启动:


#!/bin/bash


## /yourscript.sh


su -l john -c '/opt/intel/openvino/bin/setupvars.sh' -



然后为它添加执行权限:


# chmod +x /yourscript.sh



下面是服务文件:


[Unit]


Description=Launch application



[Service]


## removed the user param


WorkingDirectory=/home/thingtrax/Documents/ThingTraxVisionPython


Environment=DISPLAY=:0


ExecStartPre=/yourscript.sh ## changed the script to yourscript.sh


ExecStart=/usr/bin/python3 /home/john/Documents/ThingTraxVisionPython/rtsp_ttfr.py


Restart=on-failure


RestartSec=30s



[Install]


WantedBy=graphical.target





COM  STA  COMM  SYS  系统  服务  
相关文章