Выполнение демонстрационной модели Coral Board при загрузке с пользовательским сервисом Systemd - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь настроить мою коралловую плату для загрузки с моделью обнаружения объектов Coco, используя специальный сервис systemd. Я создал исполняемый файл, файл модуля, а затем включил службу. Предполагается, что канал камеры будет отображаться на мониторе, но когда я включаю плату, на мониторе отображается только синий фон sh (я полагаю, что «домашний экран» платы).

Исполняемый файл:

edgetpu_detect \
--model mobilenet_ssd...
--labels coco...

Файл модуля:

[Unit]
Description=systemd service.
After=weston.target

[Service]
PAMName=login
Type=simple
User=mendel
WorkingDirectory=/home/mendel
ExecStart=/bin/bash /usr/bin/test_service.sh
Restart=always

[Install]
WantedBy=multi-user.targer

Состояние службы после включения и после включения :

mendel@jumbo-tang:/etc/system$ sudo systemctl status myservice.service
myservice.service - systemd service.
    Loaded: loaded (/etc/systemd/system/system/myservice.service; enabled; vendor preset
    Active: active (running) since Mon 2020-01-06 03:32:03 UTC; 1s ago
Main PID: 4847 (bash)
     Tasks: 0 (limit: 4915)
    CGroup: /system.slice/myservice.service
            4847 /bin/bash /usr/bin/test_service.sh
Jan 06 03:32:03 jumbo-tang systemd[1]: myservice.service: Service hold-off time
Jan 06 03:32:03 jumbo-tang systemd[1]: Stopped Example systemd service..
Jan 06 03:32:03 jumbo-tang systemd[1]: Started Example systemd service..
Jan 06 03:32:03 jumbo-tang systemd[4847]: pam_unix(login:session): session opene

Исполняемый файл сохранен в /usr/bin и стал исполняемым с sudo chmod +x /usr/bin/test_service.sh

Файл модуля был сохранен в /etc/systemd/system, и ему были предоставлены разрешения с sudo chmod 644 /etc/systemd/system/myservice.service

Мне любопытно узнать, не может ли мой исполняемый файл просто содержать код, который я обычно использую для запуска модели, как это сделал я, или если мой файл модуля правильно настроен, или Что еще может быть не так, я не думаю.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 17 января 2020

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

1) При запуске службы systemd, особенно при загрузке, иногда не во всех средах переменные загружаются, в этом случае вам может понадобиться добавить строку:

Environment=DISPLAY=:0

перед ExecStart. Тем не менее, я не подозреваю, что это проблема, потому что процесс ожидает weston.target, который уже должен ожидать переменные окружения.

2) Этот намного сложнее, чем предыдущий но вы неправильно написали

"target" in "WantedBy=multi-user.targer" (joking, of course)

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

1) создайте файл discts.service с помощью команды следующее содержимое:

[Unit]
Description=systemd auto face detection service
After=weston.target

[Service]
PAMName=login
Type=simple
User=mendel
WorkingDirectory=/home/mendel
Environment=DISPLAY=:0
ExecStart=/bin/bash /usr/bin/detect_service.sh
Restart=always

[Install]
WantedBy=multi-user.target

2) mv файл /lib/systemd/system/detects.service

$ sudo mv detects.service /lib/systemd/system/detects.service

3) создать вызов файла detect_service. sh со следующим content

edgetpu_detect --model fullpath/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label fullpath/coco_labels.txt

4) сделать его исполняемым и перенести его в / usr / bin

$ sudo chmod u+x detect_service.sh
$ sudo mv detect_service.sh /usr/bin

5) включить службу с systemctl

$ sudo systemctl enable detects.service
...