LINUX.ORG.RU

пользовательский юнит в автозагрузку

 


0

1

Привет.

  1. Вроде элементарщина, но чего-то сообразить не могу. Есть простой тестовый юнит (не смотрите на имена/описание):
pavlick ~ $ cat /etc/systemd/user/sway.service
[Unit]
Description=Sway WM
Documentation=man:sway(5)

[Service]
#Restart=always
Type=simple
ExecStart=bash -c "sleep 10m"

[Install]
WantedBy=my_graphic.target

pavlick ~ $ systemctl get-default
my_graphic.target

После копирования в /etc/systemd/user делал systemctl –user enable sway. Пробовал

$ mv /etc/... ~/.config/systemd/user/sway.service

делал

$ systemctl start sway.service

раскомментировал Restart=always. Но сервис упорно не стартует автоматически после перезагрузки и логина в Павлика. При этом если кинуть сервис в /etc/systemd/system для systemd с ПИД==1, то всё ок. Почему не получается?

★★

WantedBy=my_graphic.target

А у тебя есть такой пользовательский таргет?

systemctl get-default
my_graphic.target

Этот системный таргет, он к пользовательсим юнитам отношения не имеет.

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

Есть, его сам написал, кинул в /etc/systemd/system

[Unit]
Description=My Graphic Multiuser
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes

Т.е. отдельный таргет для ПИД==1 и !=1, сейчас попробую.

pavlick ★★
() автор топика

Интересная фигня получилась, таргет для системного системд сделал multi-user.target, для Павлика my_graphic.target (скопировал его в ~/.config/systemd/user), перезапустился, юнит не стартанул, появилась какая-то ошибка в выхлопе systemctl –user

● user@1000.service                                                                                 loaded failed failed    User Manager for UID 1000

На попытки сделать systemctl –user status user@1000.service (или запросить статус sway, или любого другого сервис) выдаёт: Failed to connect to bus: Нет такого файла или каталога. Как узнать что пошло не так? Да ещё и всякие бинарные логи …

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

Сделал, в том таргете была зависимость

Requires=multi-user.target
After=multi-user.target

закомментировал её, всё завелось. Печально, что попал в такое состояние, когда не было нифига понятно и никакая нифа не выдаётся (ну может не знаю).

eternal_sorrow, спасибо.

pavlick ★★
() автор топика

Кстати, а какой дефолтный таргет для пользовательского системд? Я его поменял на свой, а какой был? В юзер директориях вообще таргетов нет.

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

Как я сеть настраивал

Поштудировав мануалы, понял что systemd предлагает настраивать сетевой интерфейс через .network файл, доки к которому 1500ая портянка. Но главное не это, а то, что это дублирование уже имеющихся команд, которые знакомы, разбираться в новом и ограниченном не захотелось (хотя понимаю, что там несколько строк вышло бы, да при беглом осмотре примерно разобрался).

Надо было настроить проводной сетевой интерфейс со статическим адресом. Сначала хотел написать udev правило, но потом обнаружил, что systemd создаёт файлы устройств (если udev ставит метку, все интерфейсы метятся). Ну и набросал юнит:

$ cat /etc/systemd/system/my_netsetting.service
[Unit]
Description=Network Setting

[Service]
Type=oneshot
ExecStart=sh -c "ip link set enp6s0 up && ip address add 192.168.0.2/24 dev enp6s0 && ip route add default via 192.168.0.1 dev enp6s0"

[Install]
WantedBy=sys-devices-pci0000:00-0000:00:1c.3-0000:06:00.0-net-enp6s0.device

Мне как-то приятней юзать напрямую ip, чем новую абстракцую от systemd. Может кто не знал о такой возможности.

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

Ключевое - «Мне как-то приятней юзать …», да и сетеспецифичного там лишь ExecStart, остальное стандартный скелет юнита.

Вообще системд в принципе даже ничего (та его часть, которая занимается демонами), но зачем делать комбайн? Распространять модулями, вот тебе надо, скачай с репозитория net.service, а я бы по-своему сделал.

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

но зачем делать комбайн?

Для унификации и упрощения администрирования - всё как требует бизнес для сокращения издержек.

Если тебе там что-то ненужно, не используй. Или пересобери в минимальную базу init+udev

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

какой дефолтный таргет для пользовательского системд?

default.target

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

Для унификации и упрощения администрирования - всё как требует бизнес для сокращения издержек.

Каких издержек? Не переломится твой бизнес и наберёт в консоли что-то вроде pacman -S systemd-network. Ты рискуешь растерять весь «актив», и превратиться в винду. За кусок колбасы на всё готов.

Если тебе там что-то ненужно, не используй.

Если тебе там что-то нужно, установи. Вот какого чёрта системд мне всунул загрузчик? Спасибо, кончено, но не очень то и надо.

default.target

Да, спасибо, уже разобрался.

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

Вот какого чёрта системд мне всунул загрузчик?

Если тебе кто-то что-то куда-то всунул, то с этим не на ЛОР, а в полицию.

intelfx ★★★★★
()

Вопрос

Раз уже тему создал: стоит Sway оконный менеджер, к нему есть swaynag - выводит информационные сообщения. Если исполнять из sway сессии, то порядок, но мне нужно отправить сообщение из системд сервиса - не работает. Никто не подскажет? В мане swaynag есть

-o, --output <output>
           Set the output to use. This should be the name of a xdg_output.

не оно? В иксах, по-моему, достаточно было задать DISPLAY и всё работало, может здесь что-то подобное?

Если тебе кто-то что-то куда-то всунул, то с этим не на ЛОР, а в полицию.

Один обратился, так ему ещё и бутылку всунули.

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

Что-то никак, пытался из другого VT

swaymsg -s /run/user/1000/sway-ipc.1000.2183.sock 'exec swanag -m fsdfsfjksjfk'

но закрыть sway получается

swaymsg -s /run/user/1000/sway-ipc.1000.2183.sock exit
pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от pavlick

так работает:

$ cat /tmp/1
#/bin/sh
swaynag -m akjfkjkj

$ swaymsg -s /run/user/{UID}/{socet_name} 'exec /tmp/1'
pavlick ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.