GNU/Linux >> Tutoriels Linux >  >> Linux

Comment alerter à la fin d'une longue tâche sur Ssh ?

Mon bureau est Ubuntu, qui a le programme pratique notify-send , qui affiche une alerte sur le bureau. Il intègre également l'alias pratique suivant :

$ type alert
alert is aliased to `notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^s*[0-9]+s*//;s/[;&|]s*alert$//')"'

Cela signifie que vous pouvez exécuter very-long-running-command; alert , laissez le terminal s'exécuter en arrière-plan et recevez une notification lorsque la tâche est terminée.

Lorsque vous êtes sur un serveur CentOS via ssh, les choses sont un peu plus délicates. Voici une façon de procéder :

localhost$ ssh [email protected]; alert
example.net$ very-long-running-command; exit

Cela fonctionne, d'une certaine manière, mais quitter après chaque commande n'est généralement pas ce que je veux faire.

Mon ordinateur n'a pas de haut-parleurs. Il peut émettre un bip.

Réponse acceptée :

La chose la plus simple que je puisse imaginer ici est d'utiliser une deuxième session SSH pour transmettre un FIFO nommé. Je suppose que vous avez un tmp/ dans votre répertoire personnel ; n'hésitez pas à conserver le FIFO où vous le souhaitez.

local$ ssh [email protected] 'mkfifo ~/tmp/alert_fifo ; while cat ~/tmp/alert_fifo ; do : ; done' | 
    while read icon_name text ; do
        notify_send --urgency=low -i "$icon_name" "$text"
    done &

Ensuite, vous pouvez laisser cela s'exécuter en arrière-plan pendant que vous ouvrez une deuxième session SSH pour faire votre vrai travail :

local$ ssh [email protected]
remote$ alias remote_alert='echo ... >~/tmp/alert_fifo'
remote$ long_running_command; remote_alert

…où remote_alert est une alert modifiée alias avec notify_send --urgency=low -i remplacé par des éléments faisant écho au FIFO.

Cela fonctionnera avec un ensemble minimal d'outils sur la machine distante :uniquement les utilitaires ssh et POSIX standard. Cependant, avec un FIFO, si vous oubliez d'exécuter votre lecteur (ou si votre lecteur meurt), votre écrivain se bloquera. Donc, si vous avez socat disponible, vous pouvez le rendre un peu plus indulgent :

local$ ssh [email protected] 'socat UNIX-RECV:~/tmp/alert_socket -' | 
    while read ...
        ...
    done &

local$ ssh [email protected]
remote$ alias remote_alert='echo ... | socat - UNIX-SEND:~/tmp/alert_socket'

Linux
  1. Comment télécharger et charger des fichiers via SSH

  2. Ssh - Comment transférer X sur Ssh pour exécuter des applications graphiques à distance ?

  3. Comment importer une base de données via SSH sur cPanel ?

  4. Comment exporter une base de données via SSH sur cPanel ?

  5. Comment différencier les répertoires sur ssh

SSHFS :comment monter des systèmes de fichiers distants via SSH

Comment exécuter des commandes Linux sur un système distant via SSH

Comment utiliser SSHFS pour monter des répertoires distants sur SSH

Comment transférer des fichiers avec Rsync sur SSH

Comment utiliser SSHFS Mount avec des répertoires distants via SSH

Comment copier à distance des fichiers via SSH sans entrer de mot de passe