GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo alertar sobre la finalización de una tarea larga a través de Ssh?

Mi escritorio es Ubuntu, que tiene el práctico programa notify-send , que muestra una alerta en el escritorio. También tiene incorporado el siguiente alias práctico:

$ 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$//')"'

Esto significa que puede ejecutar very-long-running-command; alert , deje el terminal ejecutándose en segundo plano y reciba una notificación cuando se complete la tarea.

Cuando estás en un servidor CentOS a través de ssh, las cosas son un poco más complicadas. Esta es una forma de hacerlo:

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

Esto funciona, de alguna manera, pero salir después de cada comando generalmente no es lo que quiero hacer.

Mi computadora no tiene parlantes. Puede emitir un pitido.

Respuesta aceptada:

Lo más simple que puedo imaginar aquí es usar una segunda sesión SSH para reenviar un FIFO con nombre. Supongo que tienes un tmp/ en el directorio de tu casa; siéntete libre de mantener el FIFO donde quieras.

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 &

Luego puede dejar que esto se ejecute en segundo plano mientras abre una segunda sesión SSH para hacer su trabajo real:

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

…donde remote_alert es una alert modificada alias con notify_send --urgency=low -i reemplazado con hacer eco de las cosas al FIFO.

Esto funcionará con un conjunto mínimo de herramientas en la máquina remota:solo las utilidades ssh y POSIX estándar. Sin embargo, con un FIFO, si olvida ejecutar su lector (o su lector muere), entonces su escritor se colgará. Entonces, si tiene socat disponibles, puedes hacer esto un poco más indulgente:

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. Cómo descargar y cargar archivos a través de SSH

  2. Ssh:¿cómo reenviar X sobre Ssh para ejecutar aplicaciones gráficas de forma remota?

  3. ¿Cómo aceptan algunas aplicaciones el clic del mouse en Bash sobre Ssh?

  4. ¿Cómo importo una base de datos sobre SSH en cPanel?

  5. ¿Cómo exporto una base de datos a través de SSH en cPanel?

SSHFS:Cómo montar sistemas de archivos remotos a través de SSH

Cómo ejecutar comandos de Linux en un sistema remoto a través de SSH

Cómo usar SSHFS para montar directorios remotos sobre SSH

Cómo transferir archivos con Rsync a través de SSH

Cómo usar el montaje SSHFS con directorios remotos a través de SSH

Cómo copiar archivos de forma remota a través de SSH sin ingresar una contraseña