?

Log in

No account? Create an account
Cat-light

klink0v


Блохи в свитере деда Сергеича


Маленькие извращения с systemd
Cat-light
klink0v

Допустим, нам хочется на работающей системе автоматически иметь в одном из терминалов (tty) какую-нибудь неинтерактивную софтину, запущенную независимо от факта логина пользователя в системе. В старые добрые времена мы бы запихнули её вызов в inittab. Сейчас же везде systemd, там inittab-а уже нетути. Что же делать?

Ответ: создавать свой собственный service-файл для systemd и запихивать его в "/etc/systemd/system/". Содержание примерно следующее (может варьироваться в зависимости от конкретных потребностей). Я чисто для примера взял утилиту "top".

/etc/systemd/system/top.service


[Unit]
Description=top on tty1

[Service]
Type=simple
ExecStart=/usr/bin/top
StandardInput=tty
StandardOutput=tty
TTYPath=/dev/tty1

[Install]
WantedBy = multi-user.target

После этого надо сделать "systemctl enable top.service", дабы активировать данный конфиг на автостарт.

Если же мы "до кучи" хотим, чтобы софтина могла бы работать интерактивно, то надо сделать так, чтобы она не дралась с logind. Для этого в "/etc/systemd/logind.conf" выставляем значение параметра "NAutoVTs" в какую-нибудь небольшую разумную величину. Например, "NAutoVTs=2" будет означать, что logind займёт два первых виртуальных терминала. А наш сервис мы будем запускать на третьем терминале ("TTYPath=/dev/tty1"). Тогда пользователь сможет даже понажимать на кнопочки.

Естественно, надо быть весьма осторожным, т.к. по умолчанию вся эта радость будет выполняться из-под root-а.