Я использую Raspbian GNU Linux (9) Stretch на Raspberry Pi 3.
Обзор проекта
- Python-скрипт, который использует 2 входа в Pi. Расчеты выполняются на основе этих входных данных, а значения хранятся в базе данных.
- Отдельный веб-сайт Django, который считывает значения из этой базы данных и обновляет содержимое веб-страницы.
Сервер Django Запустите с помощью: /home/pi/mysite/manage.py runserver 127.0.0.1:8000
Python Script , расположенный по адресу: /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 должен запускаться первым.
Мне кажется, я ищу что-то вроде Хочет .
Я наткнулся на следующий вопрос , но мне не удалось реализовать работающее решение. Однако большая часть информации актуальна.
если в вашем модуле 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 - нет.
Любые предложения о том, как это можно сделать?