Есть ли что-то вроде демона для каждого пользователя?

11

Мне нужно запустить некоторые фоновые процессы, которые живут, пока я вошел в систему с определенным пользователем.

Существует ли что-то вроде демона для каждого пользователя? Я знаю только глобальные демоны, которые живут от запуска компьютера до выключения (или запуска / уничтожения вручную).

на данный момент я создал скрипт, который проверяет, существует ли процесс, и создает процесс, если его нет. Этот скрипт затем запускается с nohupкомандой из моего .profile. Таким образом, процесс запускается при запуске и запускается только один раз (даже при наличии нескольких rxvtтерминов). Тем не менее, он никогда не будет убит после того, как я войду в систему (что не является катастрофой, но более чистым, чтобы также завершить процесс).

romeovs
источник

Ответы:

9

systemd позволяет пользователям запускать свои собственные экземпляры systemd для управления частными демонами.

Если у вас уже установлен systemd, все, что вам нужно сделать, это запустить systemd --userи управлять вашими сервисами, запустив их systemctl --user. Сервисы пользователя будут искать в ~/.config/systemd/user.

По умолчанию systemd убивает пользовательские сервисы при выходе из системы (как вы и просили). Это поведение можно изменить, включив задержку для пользователя с помощью loginctl --enable-linger $USERкоманды.

Более подробную информацию можно найти на странице ArchWiki .

aekojouz
источник
1
Есть ли настройка, чтобы заставить работать задержку из файла конфигурации вместо команды bash.
CMCDragonkai
4

Служба dbus предназначена для того, чтобы ... хорошо, она может быть использована для этого :-). Пользователь dbus debus запускается, когда пользователь входит в среду рабочего стола, и завершается, когда пользователь выходит из системы (см. Справочную страницу dbus-launchи параметр --exit-with-session). Служба dbus может быть запущена вместе с экземпляром dbus или при первом вызове интерфейса службы через dbus. Каждый пользователь может иметь свои собственные спецификации служб dbus, определенные в скрытом каталоге в домашнем каталоге пользователя или глобально в /etc. Смотрите на Dbus домашнюю страницу на FreeDesktop для большого объема документации и эталонной реализации.

В настоящее время я использую только дистрибутивы на основе Debian. У всех этих есть сценарии, в /etc/X11/Xsession.dкоторых очень часто изменяется строка, которая в самом конце будет оценена как команда, запускающая выбранную среду рабочего стола. Существует один такой сценарий для dbus, который добавляет команду к оболочке dbus dbus-launch. Эта обертка запускает dbus-сервер и, по крайней мере, на ванильном Debian (и я хочу сказать "на всех дистрибутивах на основе Debian") dbus-launchпредоставляется опция --exit-with-session.

Вы должны иметь возможность обернуть процессы, которые вы хотите запустить, когда пользователь вошел в службу dbus, а IIRC dbus автоматически завершает работу своих служб перед выходом.

Bananguin
источник
2

Если вы используете BASH в качестве оболочки, вы можете попытаться сделать какое-то обнаружение в ~ / .bash_logout и завершить работающий процесс.

В долгосрочной перспективе вы, вероятно, ищете взаимодействие (например, через D-Bus) с чем-то вроде ConsoleKit или logind systemd .

peterph
источник