existe algo como um daemon por usuário?

11

Preciso executar alguns processos em segundo plano que permanecem enquanto eu estiver logado com um determinado usuário.

Existe algo como um daemon por usuário? Conheço apenas os daemons globais que vivem da inicialização do computador até o desligamento (ou inicialização / interrupção manual).

por enquanto, criei um script que verifica se o processo já existe e cria o processo se não existir. Este script é então executado com o nohupcomando my .profile. Dessa forma, o processo é iniciado na inicialização e é iniciado apenas uma vez (mesmo com vários rxvttermos indo e vindo). No entanto, ele nunca é morto após o log (o que não é um desastre, mas é mais limpo também encerrar o processo).

romaovs
fonte

Respostas:

9

O systemd permite que os usuários executem suas próprias instâncias do systemd para gerenciar daemons particulares.

Se você já possui o systemd instalado, tudo o que você precisa fazer é iniciar systemd --usere gerenciar seus serviços executando systemctl --user. Os serviços do usuário serão pesquisados ​​em ~/.config/systemd/user.

Por padrão, o systemd mata os serviços do usuário ao sair (como você solicitou). Esse comportamento pode ser alterado, permitindo a permanência de um usuário com o loginctl --enable-linger $USERcomando

Informações sobre mor podem ser encontradas na página do ArchWiki .

aekojouz
fonte
1
Existe uma configuração para fazer a ativação da ativação funcionar a partir de um arquivo de configuração, em vez de um comando bash.
CMCDragonkai
4

O serviço dbus é feito para o precicely that ... ok, pode ser usado para o precicely that :-). O dbus deamon por usuário é iniciado quando um usuário efetua login em um ambiente de desktop e é encerrado quando o usuário efetua logout (consulte a página de manual dbus-launche a opção --exit-with-session). Um serviço dbus pode ser iniciado junto com a instância dbus ou quando a interface do serviço é chamada pela primeira vez através do dbus. Cada usuário pode ter suas próprias especificações de serviços dbus, definidas em um diretório oculto na página inicial dos usuários ou globalmente em /etc. Veja a página inicial do dbus no freedesktop para obter muita documentação e implementação de referência.

Eu só uso distros baseados no Debian atualmente. Todos possuem scripts nos /etc/X11/Xsession.dquais muitas vezes modificam uma sequência que, no final, será avaliada como o comando que inicia o ambiente de área de trabalho selecionado. Existe um desses scripts para o dbus, que precede o comando com o wrapper dbus dbus-launch. Este wrapper lança um servidor dbus e pelo menos no Debian baunilha (e estou disposto a dizer "em todas as distribuições baseadas no Debian") dbus-launchtem a opção --exit-with-session.

Você deve ser capaz de agrupar os processos que deseja executar enquanto um usuário estiver conectado a um serviço dbus e o IIRC dbus automagicamente se encarrega de encerrar seus serviços antes de sair.

Bananguin
fonte
2

Se você estiver usando o BASH como seu shell, tente fazer alguma detecção em ~ / .bash_logout e encerre o processo em execução.

O que você provavelmente está procurando a longo prazo é interagir (por exemplo, via D-Bus) com algo como o ConsoleKit ou o logind do systemd .

peterph
fonte