Запуск сценария python с systemd при загрузке не выполняется, но запуск вручную работает нормально

Я запускаю пару сценариев для отображения точечной матрицы при загрузке Pi 3 B. Сценарий nodejs просто записывает файл изображения в путь. Скрипт python вызывает Adafruit_RGBmatrix для отправки изображения на дисплей. Nodejs отлично работает при загрузке. Сценарий python может привести к сбою всего пи при запуске при загрузке, но он отлично работает при запуске вручную с помощью systemctl.

python: dashboard.py

import Image
import time
from rgbmatrix import Adafruit_RGBmatrix

# Rows and chain length are both required parameters:
matrix = Adafruit_RGBmatrix(32, 2)

matrix.SetWriteCycles(16)

while True:
  try:
    image = Image.open("/home/pi/dashboard.png")
    image.load()
    matrix.SetImage(image.im.id, 0, 0)
    time.sleep(10)
    matrix.Clear()
  except:
    print("Dashboard image could not be opened!")
    time.sleep(5)

systemd dashboard_display.service

[Unit]
Description=Dashboard Display Driver
#Requires=dashboard_png.service?
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/src/drive-display/dashboard.py
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Когда я запускаю dashboard_display.service с помощью systemctl start dashboard_display.service он работает несколько дней. Запуск его при загрузке после включения, он каким-то образом приводит к сбою pi.

Я пытался настроить некоторые задержки при перезагрузке и пробовал различные значения After и Require. Также вложил скрипт python в try /, за исключением того, чтобы позволить ему засыпать и повторить попытку.

Я не получаю журналы, но похоже, что он слишком быстро выходит из строя слишком много раз, и пи вылетает.

Есть ли лучший вариант способ обеспечить запуск этих служб, когда все будет доступно? И служба python не запустится, пока служба nodejs не будет выполнена?

0
задан 15 March 2020 в 23:50
1 ответ

В вашем вопросе отсутствует некоторая информация, но я предполагаю, что комментарий- out # Requires = dashboard_png.service - это сценарий nodejs, который предполагает создание файла dashboard.png . Кроме того, пропуская описание "сбоя", я могу только предположить, что это вызвано либо отсутствием dashpoard.png , либо записью nodejs, когда pythin пытается прочитать из него.

Сделав эти два предположения, я бы предложил попробовать добавить After = dashboard_png.service в часть [Unit] службы dashboard_display.service , и раскомментирование Requires = dashboard_png.service .

Согласно руководству systemd.unit :

зависимости требований не влияют на порядок, в котором службы запускаются или останавливаются. Это должно быть настроено независимо с опциями After = или Before =. Если модуль foo.service загружает модуль bar.service, как настроено с помощью Wants =, и никакое упорядочение не настроено с помощью After = или Before =, то оба модуля будут запущены одновременно и без какой-либо задержки между ними, если foo.service активирован.

Хотя цитата взята из описания директивы Wants = , то же самое относится и к директиве Requires = .

0
ответ дан 30 March 2020 в 01:29

Теги

Похожие вопросы