【发布时间】:2019-02-08 09:03:01
【问题描述】:
我在 Raspberry Pi 3 上运行 Raspbian GNU Linux (9) Stretch。
项目概述
- 使用 Pi 的 2 个输入的 Python 脚本。根据这些输入执行计算,并将值存储在数据库中。
- 一个单独的 Django 网站,从该数据库中读取值并更新网页内容。
Django 服务器运行使用:/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 脚本。
但是,我无法让我的 Django 服务器在同一个 systemd 服务中启动并运行,因为只允许使用一个 ExecStart。我需要两者并行运行,但要先启动 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服务器未启动。
关于如何做到这一点的任何建议?
【问题讨论】:
-
鉴于这是两个不同的服务,为什么不直接使用两个不同的单元文件呢?
-
如何在启动时按特定顺序执行它们?
-
您可以在 systemd 单元中指定依赖关系。
-
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。
-
谢谢@jww,我会记住这一点以备将来使用。
标签: python linux raspberry-pi systemd boot