Comment arrêter l'ordinateur une fois la tâche terminée?


25

Je commence généralement un téléchargement avant d'aller à l'école.
Quelle commande dois-je utiliser pour effectuer automatiquement les sauvegardes nécessaires et éteindre l'ordinateur une fois une tâche particulière terminée?
(Par exemple, après avoir installé les mises à jour ou après avoir téléchargé un fichier volumineux.)

J'ai également posté sur askubuntu .

Réponses:


25

Cela dépend de la tâche que vous avez commencée. S'il s'agit d'un outil en ligne de commande, vous pouvez simplement exécuter haltou shutdown -h now:

  1. wget http://..../somelargefile; halt- haltsera exécuté aprèswget

  2. wget http://..../somelargefile && halt- haltsera exécuté si wgetne retourne aucune erreur

  3. wget http://..../somelargefile || halt- haltsera exécuté en cas d' wgeterreur de retour

Une alternative à cela consiste à utiliser kshutdown- dans cette application, vous pouvez spécifier quelle action doit être effectuée (redémarrage / arrêt / hibernation / etc ou exécution de la commande) et quand (après un certain temps ou lorsqu'une autre application se ferme). Si vous souhaitez utiliser cet outil, vous devez choisir le processus correct - certains utilitaires de mise à jour démarrent quelques sous-processus.

KShutdown


4
Vous pouvez également donner shutdownun temps d'attente; pas besoin d'utiliser kshutdown à cet effet.
Cascabel

1
Non, mais shutdownn'a aucun moyen d'attendre un événement réel.
Shadur

18

Chaque processus a un répertoire nommé en fonction de son identifiant de processus (pid) dans le procsystème de fichiers. Par conséquent, vous pouvez attendre la fin d'un processus spécifique en vérifiant si son répertoire existe à plusieurs reprises.

Vous pouvez l'utiliser pour effectuer un arrêt du système après la fin du processus comme ceci (remplacez 2296 par le pid à attendre):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Avantages:

  • Vous pouvez décider d'arrêter ou non après avoir désactivé la commande shell
  • L'arrêt est émis en tant que root, la commande à attendre n'est pas nécessairement effectuée en tant que root (pas besoin de contourner l' sudoinvite de fin de mot de passe).

Désavantages:

  • Il peut arriver que votre processus se termine et que le système d'exploitation réutilise ensuite le même pid pour un processus nouvellement généré dans cette seconde (condition de concurrence critique). Vous devez donc continuer à attendre la fin de ce nouveau processus.

2
Point principal: Cela fonctionne même si le processus a commencé.
Heisenberg

Si vous avez commencé quelque chose à partir d'un terminal que vous avez encore ouvert psdans ce même terminal, cela devrait vous aider à repérer le PID pour le CMD. Si le processus était / est dans un autre terminal, pipping la sortie ps pour tout via grep pour filtrer votre commande devrait vous aider à le trouverps -elf | grep <command_related_word>
TafT

Mieux vaut vérifier ma réponse basée sur le processuspgrep aka grep ...
Gilles Quenot

Comment puis-je mettre cette commande en arrière-plan?
DerWeh

1
@DerWeh Enveloppez-le dans un script shell et suivez les étapes indiquées ici: stackoverflow.com/q/625409/1025391
moooeeeep

3

Vous pouvez utiliser les opérateurs &&et ||pour enchaîner les commandes. Par exemple:

apt-get update && sleep 2 && init 0

qui effectuera une mise à jour du système à l'aide d'aptitude, attendez 2 secondes et passez au niveau d'exécution 0, selon votre système, cela peut ou non éteindre le matériel.

Pour parler d'une ou plusieurs opérations à la suite d'une opération plus arbitraire, comme un navigateur Web, vraisemblablement, le téléchargement, vous auriez besoin d'une logique supplémentaire pour regarder le fichier de téléchargement afin de vérifier que le téléchargement est en fait terminé, cependant, la logique du shell est inchangée.


3

Si vous souhaitez surveiller un processus déjà démarré, vous pouvez le faire dans un :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now

1

Il existe une application, nommée sentinella qui peut le faire pour vous avec son interface graphique: sentinelle

pour l'installer:

sudo aptitude update
sudo aptitude install sentinella
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.