Como iniciar um serviço systemd após o login do usuário e pará-lo antes do logout do usuário

8

Eu tenho uma máquina do Fedora 23.

Eu tenho um script bash de sincronização de diretório / arquivo que sincroniza meu diretório local / home para um diretório remoto (em uma máquina NAS). Eu o executo manualmente, mas eu gostaria de criar um serviço systemd e torná-lo mais flexível, já que outras pessoas usam meu PC com suas próprias credenciais de usuário, eu gostaria de saber quando um usuário está logado e iniciar meu serviço depois. / p>

Existe algo que eu possa fazer no arquivo systemd do meu serviço ou terei que verificar isso do meu código no script?

Eu só preciso ter certeza de que tenho acesso a variáveis de ambiente (como $ USER) e executá-lo como um serviço.

Minha principal fonte de documentação é o link link

    
por GeorgeKaf 09.02.2016 / 09:15

1 resposta

7

Use o systemd ele já inclui suporte para sessões do usuário, na verdade você já deve depender dele (involuntariamente).

Crie o diretório de serviços

mkdir -p $HOME/.local/share/systemd/user

Crie editar um arquivo de serviço (vim, gedit, geany - o que você quiser)

vim $HOME/.local/share/systemd/user/my.service

Deveria ser mais ou menos assim, se for um serviço permanente.

[Unit]
Description=My very own Service
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/path/to/start/script arguments
[Install]
WantedBy=default.target

Mas parece que você prefere acioná-lo uma vez e, em seguida, ser bom com isso, então use uma configuração específica como esta:

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/path/to/start/script arguments
ExecStop=/path/to/stop/script arguments
[Install]
WantedBy=default.target

Isso pressupõe que seu script seja executável, por exemplo:

chmod a+x /path/to/start/script
chmod a+x /path/to/stop/script

Se você precisasse preceder o caminho para o respectivo intérprete:

ExecStart=/bin/bash /path/to/start/script arguments

Agora recarregue o systemd (e faça o login novamente para testar)

systemctl --user enable my.service # enables the service
systemctl --user # should display your new unit in the list
journalctl --user should show the log

Se precisar de mais informações, consulte o Arch-Wiki , por exemplo. Este thread askubuntu tem várias idéias, incluindo incidentalmente, meu.

Você pode estender o comportamento (se você for root) a outros usuários definindo o serviço globalmente. Para fazer isso, você precisaria criar o arquivo de serviço em / usr / share / systemd / user / não em $ HOME / .local / share / systemd / user .

    
por 17.11.2017 / 02:17