Yocto добавление третьей системы службы в файл рецепта заставляет других не запускаться - PullRequest
0 голосов
/ 13 июня 2019

Я изменяю файл рецепта Yocto .bb, чтобы добавить и включить 3 службы systemd в моем образе. Ниже показана нижняя часть моего файла рецептов с добавлением и включением только двух сервисов. Это работает!

app1.service - это однократная базовая служба, которая запускается один раз, и app2.service ожидает завершения app1.service в первую очередь, используя « After = app1.service» в файле app2.service. Все это прекрасно работает без проблем:

FILES_${PN} += "${sysconfdir} \
               ${systemd_unitdir}/system/app1.service \
               ${systemd_unitdir}/system/app2.service \
"
inherit systemd

SYSTEMD_SERVICE_${PN} = "app1.service app2.service"

Теперь я добавляю третий сервис app3.service, как показано ниже. Эта служба также должна дождаться, пока app1.service завершит работу таким же образом

FILES_${PN} += "${sysconfdir} \
               ${systemd_unitdir}/system/app1.service \
               ${systemd_unitdir}/system/app2.service \
               ${systemd_unitdir}/system/app3.service \

"
inherit systemd

SYSTEMD_SERVICE_${PN} = "app1.service app2.service app3.service"

Однако, когда я запускаю свое устройство, запускается только app3.service, где app1.service и app2.service сообщают следующее, как показано ниже, о том, что служба каким-то образом не включена:

app1.service - app1
Loaded: loaded (/lib/systemd/system/app1.service; disabled; vendor 
preset: enabled)
Active: inactive (dead)

Это я не могу понять. Я ожидаю, что все три службы будут включены, потому что я добавил их в SYSTEMD_SERVICE _ $ {PN}.

Что-то не так с добавлением трех служб, как я делаю в файле рецепта .bb? Спасибо

app1.service:

[Unit]
Description=app1 
ConditionPathExists=/app
After=network.target uncrypte_app.service uncrypte_data.service

[Service]
Type=oneshot
WorkingDirectory=/app
ExecStart=/app/app1
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

app2.service:

[Unit]
Description=app2 
ConditionPathExists=/app
After=network.target uncrypte_app.service uncrypte_data.service app1.service

[Service]
Type=simple
WorkingDirectory=/app
ExecStartPre=/bin/rm -f /var/run/app2.pid
ExecStart=/app/app2 start
ExecStop=/app/app2 stop
RemainAfterExit=yes
Restart=on-failure

[Install]
WantedBy=multi-user.target

app3.service:

[Unit]
Description=app3
ConditionPathExists=/storage
After=network.target uncrypte_app.service uncrypte_data.service app1.service

[Service]
WorkingDirectory=/storage
ExecStart=/storage/app3
RemainAfterExit=yes
Restart=on-failure

[Install]
WantedBy=multi-user.target

1 Ответ

0 голосов
/ 14 июня 2019

Поскольку рецепт наследует класс systemd, вы пытались определить переменную SYSTEMD_AUTO_ENABLE?

Эта переменная:

указывает, должна ли служба, указанная вами в SYSTEMD_SERVICE,запускаться автоматически или нет.

Вы можете добавить следующую строку в свой рецепт пакета

  SYSTEMD_AUTO_ENABLE_${PN} = "enable"
...