web-dev-qa-db-fra.com

Comment empêcher systemd suspend d'arrêter n'importe quel service avec un service dont-sleep.service

J'ai un HTPC/NAS avec 16.04.1 LTS, que je veux passer en mode suspension après 15 minutes d'inactivité. D'autre part, je veux inhiber le mode suspension si ...

  • ... Je suis connecté via ssh.
  • ... pyLoad est en cours de téléchargement.
  • ... il y a des sessions d'écran actives.

J'ai créé un dont-sleep.service dans /etc/systemd/system/. Le service exécute un script dont-sleep _ avant sleep.target, qui renvoie 1 si l'un des points ci-dessus est vrai.

Jusqu'à présent, cela semble fonctionner, mais j'ai remarqué, en regardant une vidéo via sftp, que la connexion semblait être interrompue toutes les 15 minutes. systemctl status dont-sleep.service me dit que cela se produit exactement lorsque systemd essaie de passer en suspension, mais est arrêté par mon dont-sleep.service.

Donc, je suppose que systemd arrête certains services nécessaires avant ou lors de l'appel de mon script dont-sleep et les redémarre après le retour de mon script 1.

Comment puis-je résoudre ce problème?

statut systemctl 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
3
egladil86

J'ai essayé d'empêcher Ubuntu 16.04 de dormir pendant une sauvegarde à distance (rsync s'exécutant sur ssh avec backuppc). J'ai mis en œuvre votre solution ci-dessus et jusqu'à présent, cela semble fonctionner pour moi.

Pour répondre à votre question, je vois dans syslog que NetworkManager déconnecte le réseau, puis le reconnecte (ce qui dans mon cas prend environ 12 secondes). Comme ssh est assez robuste et ne semble pas se soucier des petites interruptions réseau de ce type, cela ne semble pas entraver ma sauvegarde, bien que ce ne soit clairement pas idéal.

Pour le moment, je suppose que la raison pour laquelle le réseau se déconnecte est que tous les processus de veille sont exécutés en parallèle, ce qui est expliqué dans les pages de manuel de systemd-suspend:

les exécutables de ce répertoire sont exécutés en parallèle et l'exécution de l'action n'est pas poursuivie tant que tous les exécutables ne sont pas terminés.

http://manpages.ubuntu.com/manpages/zesty/man8/systemd-suspend.service.8.html

Si tel est le cas, il ne semble pas y avoir d'espoir de garantir qu'il s'agisse du premier processus et d'arrêter les actions de veille avant que tout autre processus de veille ait commencé à s'exécuter (sans modification de systemd pour la prendre spécifiquement en charge au moins).

1
Cloudranger