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 nohup
comando my .profile
. Dessa forma, o processo é iniciado na inicialização e é iniciado apenas uma vez (mesmo com vários rxvt
termos 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).
fonte
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-launch
e 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.d
quais 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 dbusdbus-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-launch
tem 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.
fonte
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 .
fonte