Como evitar que o systemd suspenda de parar qualquer serviço com um dont-sleep.service

3

Eu tenho um HTPC / NAS com 16.04.1 LTS, que eu quero entrar no modo de suspensão após 15 minutos de inatividade. Por outro lado, quero inibir o modo de suspensão se ...

  • ... Estou conectado via ssh.
  • ... pyLoad está baixando.
  • ... há sessões de tela ativas.

Eu criei um dont-sleep.service em /etc/systemd/system/ . O serviço executa um script dont-sleep antes de sleep.target , que retorna 1 se qualquer um dos pontos acima for verdadeiro.

Até agora, isso parece funcionar, no entanto, notei, enquanto assistia a um vídeo via sftp, que a conexão parece ser interrompida a cada 15min. systemctl status dont-sleep.service me diz que isso acontece exatamente sempre que o systemd tenta entrar em suspensão, mas é interrompido pelo meu dont-sleep.service .

Portanto, minhas suposições são que o systemd interrompe alguns serviços necessários, antes ou durante a chamada do meu script dont-sleep e os reinicia depois que meu script retorna 1.

Como posso consertar isso?

statusctl do sistema dont-sleep.service:

$ sudo systemctl status dont-sleep.service 
● dont-sleep.service - Inhibit suspend.
   Loaded: loaded (/etc/systemd/system/dont-sleep.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Di 2016-09-27 18:53:44 CEST; 28min ago
  Process: 10292 ExecStart=/usr/local/bin/dont-sleep (code=exited, status=1/FAILLURE)
 Main PID: 10292 (code=exited, status=1/FAILURE)

Sep 27 18:53:44 HTPC systemd[1]: Starting Inhibit suspend....
Sep 27 18:53:44 HTPC dont-sleep[10292]: Test for open ssh connections
Sep 27 18:53:44 HTPC dont-sleep[10292]: Open connections found
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Main process exited, code=exited, status=1/FAILURE
Sep 27 18:53:44 HTPC systemd[1]: Failed to start Inhibit suspend..
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Unit entered failed state.
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Failed with result 'exit-code'.

dont-sleep.service:

[Unit]
Description=Inhibit suspend.
Before=sleep.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dont-sleep
User=xxx
Group=xxx

[Install]
RequiredBy=sleep.target
    
por egladil86 27.09.2016 / 20:05

1 resposta

1

Eu tenho tentado impedir o Ubuntu 16.04 de dormir durante um backup remoto (rsync rodando sobre o ssh usando backuppc). Eu implementei sua solução acima e até agora parece estar funcionando para mim.

Para responder a sua pergunta, ao mesmo tempo em que o dont-sleep é executado, vejo no syslog que o NetworkManager desconecta a rede e a reconecta (o que no meu caso leva cerca de 12 segundos). Como o ssh é bastante robusto e parece não se importar com pequenas interrupções de rede como essa, isso não parece atrapalhar meu backup, embora claramente não seja o ideal.

No momento eu assumo o motivo pelo qual a rede se desconecta porque todos os processos para dormir são executados em paralelo, o que é explicado nas man pages do systemd-suspend:

  

executáveis neste diretório são executados em paralelo, e execução   da ação não é continuado até que todos os executáveis tenham terminado.

link

Se este for o caso, então parece não haver esperança de garantir que seja o primeiro processo e parar as ações de suspensão antes que qualquer outro processo de suspensão tenha começado a ser executado (sem modificação no systemd para suportar especificamente pelo menos ).

    
por Cloudranger 26.05.2017 / 17:43