3 votes

Détecter un arrêt programmé en attente Serveur Ubuntu 16.04.1

Avant systemd, il était possible de voir un processus d'arrêt dans la liste des processus (par ex. ps -ef | grep shutdown ). Cependant, le conseil le plus récent que j'ai pu trouver est d'utiliser systemctl status mais je n'ai pas de chance :

root@m________a:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:    16.04
Codename:   xenial
root@m________a:~# shutdown -r 14:00
Shutdown scheduled for Mon 2016-10-10 14:00:00 BST, use 'shutdown -c' to cancel.
root@m________a:~# ps -ef | grep "shutdown"
root     10584 10508  0 13:44 pts/0    00:00:00 grep --color=auto shutdown
root@m________a:~# systemctl status systemd-halt.service
 systemd-halt.service - Halt
   Loaded: loaded (/lib/systemd/system/systemd-halt.service; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-halt.service(8)
root@m________a:~# systemctl status systemd-reboot.service 
 systemd-reboot.service - Reboot
   Loaded: loaded (/lib/systemd/system/systemd-reboot.service; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-halt.service(8)
root@m________a:~# systemctl status systemd-poweroff.service 
 systemd-poweroff.service - Power-Off
   Loaded: loaded (/lib/systemd/system/systemd-poweroff.service; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-halt.service(8)

Je serais très reconnaissant si quelqu'un pouvait m'expliquer comment je peux détecter un arrêt programmé en attente et, en fait, pourquoi un tel arrêt ne semble pas apparaître en utilisant systemctl

3voto

scampbell Points 243

Vous pouvez utiliser

cat /run/systemd/shutdown/scheduled

Ceci a été ajouté à la version 220 de systemd comme expliqué ici : https://www.phoronix.com/scan.php?page=news_item&px=Systemd-Kill-Shutdownd

2voto

Rinzwind Points 270388
systemctl status systemd-shutdownd.service

page de manuel pour le service :

systemd-shutdownd.service est un service système qui implémente les arrêts programmés, comme exposé par shutdown(8). systemd-shutdownd.service est automatiquement activé sur demande et se termine de lui-même lorsqu'il n'est pas utilisé.


Lorsqu'il n'est pas actif :

$ systemctl status systemd-shutdownd.service
 systemd-shutdownd.service - Delayed Shutdown Service
   Loaded: loaded (/lib/systemd/system/systemd-shutdownd.service; static; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-shutdownd.service(8)

Lorsqu'il est actif :

 $ sudo shutdown +100
 Shutdown scheduled for ma 2016-10-10 17:12:56 CEST, use 'shutdown -c' to cancel.
 $ systemctl status systemd-shutdownd.service 
  systemd-shutdownd.service - Delayed Shutdown Service
   Loaded: loaded (/lib/systemd/system/systemd-shutdownd.service; static; vendor preset: enabled)
   Active: active (running) since ma 2016-10-10 15:32:56 CEST; 3s ago
     Docs: man:systemd-shutdownd.service(8)
 Main PID: 3129 (systemd-shutdow)
   Status: "Shutting down at Mon 2016-10-10 17:12:56 CEST (poweroff)..."
   CGroup: /system.slice/systemd-shutdownd.service
           3129 /lib/systemd/systemd-shutdownd

okt 10 15:32:56 x systemd[1]: Started Delayed Shutdown Service.
okt 10 15:32:56 x systemd[1]: Starting Delayed Shutdown Service...
okt 10 15:32:56 x systemd-shutdownd[3129]: Shutting down at Mon 2016-1...
Hint: Some lines were ellipsized, use -l to show in full.

0voto

PerlDuck Points 12079

Sur les systèmes plus récents (exécutant systemd 220 et plus, vérifiez auprès de systemd --version ) le site systemd-shutdownd.service a été supprimé et le simple est de cat /run/systemd/shutdown/scheduled . Si le fichier existe, un arrêt est en cours et le fichier contiendra quelque chose comme

USEC=1547919000000000
WARN_WALL=1
MODE=poweroff

J'ai écrit un petit script pour gérer ce cas :

#!/usr/bin/env bash

if [ -r /run/systemd/shutdown/scheduled ]; then
    source /run/systemd/shutdown/scheduled;
    echo "System will shutdown to mode=$MODE at $(date --date="@$(( USEC / 1000000 ))")";
    exit 0;
else
    echo "No pending shutdown";
    exit 1;
fi

Pour en savoir plus :

0voto

chainmanologist Points 51

Le script de PerlDuck que j'ai trouvé ne faisait pas écho à "Aucun arrêt en attente" si shutdown -c était émis pour annuler un arrêt planifié précédent. Le fichier planifié dans /run/systemd/shutdown restait toujours présent (Ubuntu 16.04) et sa vérification me donnait toujours l'ancienne réponse. Bien sûr, si rien n'a été planifié au départ, cela fonctionne correctement.

Je pense qu'il existe un meilleur moyen technique de le faire que ce que j'ai fait en utilisant une comparaison de chaînes de caractères ; mais avec une petite modification pour vérifier le résultat donné par busctl get-property, cela fonctionne pour moi :

string="$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown)"
if [[ "$string" =~ \ 0$ ]]; then
    echo "No pending shutdown"
    exit 1;
else
    source /run/systemd/shutdown/scheduled
    echo "System will shutdown to mode=$MODE at $(date --date="@$(( USEC / 1000000 ))")";
    exit 0;
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X