我在我的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
as的原因如下:
[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服务器不启动。
有关如何做到这一点的任何建议?
你需要的是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