LINUX.ORG.RU

Добавить свой сервис файл в systemd

 , ,


0

2

Пытаюсь добавить свой файл в systemd.

Вот мой bbappend:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI_append = "file://save-boot-log.service"

SYSTEMD_SERVICE_${PN} += "save-boot-log.service"
#do_install_append() {
#   install -m 644 ${WORKDIR}/save-boot-log.service ${D}${rootlibexecdir}/systemd/system
#}

Но оно так не работает. Если же использовать закомментированный код, то файл устанавливается в нужное место, но сервис не стартует автоматом.

Какие у меня варианты, чтобы правильно разрулить ситуацию?

cast I-Love-Microsoft

★★★★★

Последнее исправление: UVV (всего исправлений: 1)

Если честно, я применяю исключительно... sysvinit =))) Всё там и так работает быстро и надежно. Увы, по systemd не подскажу, возможно это проблема общая для Linux и ее можно отладить.

Что касается SRC_URI_append - вроде верно, я бы так и добавлял файл в систему от пакета. А права у него верные попадают? Может сисямдэ требует исполняемость файла? В смысле, права попробуй 777 выставить install -m 777 ...

I-Love-Microsoft ★★★★★
()

Ничего не знаю про yocto.

Почему нельзя добавить

systemctl daemon-reload
systemctl enable save-boot-log.service
systemctl start save-boot-log.service

после install'а?

Ivan_qrt ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

systemctl enable, ЕМНИП, просто создаёт симлинки на файл сервиса в директориях /etc/systemd/system/${TARGET}.wants/, где ${TARGET} — это юниты, указанные в директивах WantedBy, RequiredBy сервиса.

Т. е. ты можешь создавать эти симлинки сам, но зачем?

theNamelessOne ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

ln -s /etc/systemd/system/my_service.service /etc/systemd/systemd/multi-user.target.wants/my_service.service

сервис стартанёт на этапе multi-user.target.

dhampire ★★★
()
Ответ на: комментарий от theNamelessOne

Т. е. ты можешь создавать эти симлинки сам, но зачем?

Чтобы запустить сервис. на том этапе где нужно тебе, а не том что в

WantedBy, RequiredBy сервиса

dhampire ★★★
()
Ответ на: комментарий от dhampire

Чтобы запустить сервис. на том этапе где нужно тебе, а не том что в WantedBy, RequiredBy сервиса

Если сервис написан нами (что следует из ОП), то можно предположить, что в WantedBy/RequiredBy уже «тот этап где нужно мне».

theNamelessOne ★★★★★
()

ервис не стартует автоматом.

Почитай немного манцов. Чтобы юнит стартовал автоматом, нужно создать искусственные зависимости от одной из «основных» целей (типа multi-user.target) к твоему юниту. Именно это происходит (если в секции [Install] юнита написано что-то вроде WantedBy=multi-user.target) при enable.

Если вручную, то делается симлинком следующего вида:

ln -sf /usr/lib/systemd/system/MYDAEMON.service /etc/systemd/system/MYTARGET.target.wants/MYDAEMON.service

Вместо MYDAEMON.service — твой юнит, вместо MYTARGET.target — multi-user.target или что-либо ещё.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Автору темы нужно логить бутявочный процесс, предполагаю что сервис должен быть с первых мгновений загрузки и пост-регистрация его сервиса не то.

I-Love-Microsoft ★★★★★
()

embedded linux, systemd

Ловите наркомана!

systemd в embedded — это как космонавтов из пушки на Луну запускать! Долетят, но такой фарш получится…

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

У меня poky. Открываю рецепт systemd и вижу:

SRC_URI = "git://anongit.freedesktop.org/systemd/systemd;branch=master;protocol=git \
           file://binfmt-install.patch \
           file://systemd-pam-configure-check-uclibc.patch \
           file://systemd-pam-fix-execvpe.patch \
           file://systemd-pam-fix-fallocate.patch \
...
Upgrade есть в планах и может быть там всё поменяли, но я руководствовался принципом писать так, как в других рецептах. cast anonymous_sama

UVV ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Автору темы нужно логить бутявочный процесс, предполагаю что сервис должен быть с первых мгновений загрузки и пост-регистрация его сервиса не то.

Да нет, сервис на самом деле прост:

[Unit]
Description=A one-shot script for making a backup copy of boot log
DefaultDependencies=no
After=var-volatile.mount tmp.mount

[Service]
Type=oneshot
ExecStart=/bin/sh -c "exec dmesg > /var/log/dmesg.boot"

[Install]
WantedBy=basic.target

UVV ★★★★★
() автор топика
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Всем спасибо, решил вот так:

do_install_append() {
   install -m 644 ${WORKDIR}/save-boot-log.service ${D}${systemd_unitdir}/system
   ln -sf ${systemd_unitdir}/system/save-boot-log.service ${D}${systemd_unitdir}/system/multi-user.target.wants/save-boot-log.service
}

Т. е. ты можешь создавать эти симлинки сам, но зачем?

А как ещё? Нужно чтобы после генерации образа они уже там были.

cast dhampire

UVV ★★★★★
() автор топика
Ответ на: комментарий от anonymous_sama

Обратимся к первоисточнику, кстати

http://docs.openembedded.ru/src_uri_variable.html
https://wiki.yoctoproject.org/wiki/How_do_I

file:/// - это же файрфокс использует. Кто ещё - хз.

UVV ★★★★★
() автор топика
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от UVV

URI != URL
Третий слеш говорит, что путь от корня, т.е. абсолютный.

Кто ещё - хз.

$ gsettings list-recursively 2>/dev/null | awk -F'[. ]' '/file:\/\/\//{print $3}' | sort -u
desktop
Disks
Evince
gedit
gthumb
rhythmbox

$ grep -c 'file:///' ~/.local/share/recently-used.xbel
251
ArcFi
()
Ответ на: комментарий от UVV

Каждый раз когда я вижу file:// то я подозреваю ошибку, или возможную ошибку в будущем. Обычно если нужно написать относительный пусть, то используется что-то вроде dir/1/, в конечном итоге я привык писать file:/// везде потому-что с ним проблем никогда не возникало, а вот с file:// я видел много проблем. Особенно еще больше вносит неясность когда можно указывать точный путь и через file:// и это работает до какого-то определенного момента. В firefox кстати file:// автоматически превращается в file:///, и хочет открыть «/». А вот в bash с file:// все работает, как и должно. На Android в IDE file:// тоже не работает, когда пути указываешь. Но конечно я согласен с тем, что нужно использовать стиль того проекта, который ты используешь. И да спасибо за ссылку.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

К слову о кроссплатформенности, в оффтопе может применяться file:// в значении smb://, и вот там три слеша не работают.

ArcFi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.