我正在Raspberry Pi 3上运行Raspbian GNU Linux(9)Stretch。
Django Server 使用以下命令运行:/home/pi/mysite/manage.py runserver 127.0.0.1:8000
Python脚本位于/home/pi/Desktop/myscript.py
启动时,我首先要确保Django服务器已启动并正在运行,然后启动python脚本。
最初,我首先尝试让python脚本在启动时运行。为此,我使用了一个简单的systemd
服务,如下所示。
[Unit]
Description=My script
[Service]
ExecStart=/usr/bin/python3 /home/pi/Desktop/myscript.py
[Install]
WantedBy=multi-user.target
这将正常运行,并在启动时启动python脚本。
但是,由于只允许一个ExecStart
,所以我无法在相同的systemd服务中启动Django服务器并使其运行。我需要将两者并行运行,但是首先要启动Django。
我想我正在寻找类似Wants的东西。
我遇到了以下question,但是我还没有实现有效的解决方案。但是,大多数信息都是相关的。
如果单元文件中的Type = simple,则只能指定一个
ExecStart
,但是可以添加尽可能多的ExecStartPre
,ExecStartPost
,但这都不适合长时间运行命令,因为它们是按顺序执行的,并且每次启动之前的所有操作都将在启动下一命令之前被终止。如果Type=oneshot
可以指定多个ExecStart
,则它们将以串行方式而不是并行方式运行。
我尝试如下创建另一个单元:
sudo systemctl edit --force mysite.service
[Unit]
Description=my site
[Service]
ExecStart=/usr/bin/python /home/pi/mysite/manage.py runserver 127.0.0.1:8000
[Install]
WantedBy=multi-user.target
这是独立的。
但是我需要同时运行两者,但是首先要启动Django。
这就是为什么我按如下方式编辑myscript.service
:
[Unit]
Description=My script
[Service]
ExecStart=/usr/bin/python3 /home/pi/Desktop/Scripts/oee_calc.py
Wants=mysite.service
[Install]
WantedBy=multi-user.target
Python脚本已启动,但django服务器未启动。
关于如何做到这一点的任何建议?
答案 0 :(得分:1)
您需要的是2个不同的systemd单元,并使用requires
[Unit]
Description=My script
[Service]
ExecStart=/usr/bin/python3 /home/pi/Desktop/myscript.py
Requires=dhangioserver.service
[Install]
WantedBy=multi-user.target
最好在DjangoService单元中指定RequiredBy
有一个名为Wants
的相关规范,仅在依赖项失败时是否继续服务方面有所不同。查看您的需求,看来您需要Requires
而不是Wants
答案 1 :(得分:0)
您可以在一个单元中尝试
ExecStart=sh -c "python script1.py & python script2.py"