GNU/Linux >> Linux Esercitazione >  >> Linux

Come avvisare sul completamento di un'attività lunga su Ssh?

Il mio desktop è Ubuntu, che ha il pratico programma notify-send , che fa apparire un avviso sul desktop. Ha anche il seguente pratico alias integrato:

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

Ciò significa che puoi eseguire very-long-running-command; alert , lascia il terminale in esecuzione in background e ricevi una notifica al termine dell'attività.

Quando sei su un server CentOS tramite ssh, le cose sono un po' più complicate. Ecco un modo per farlo:

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

In un certo senso funziona, ma uscire dopo ogni comando non è generalmente quello che voglio fare.

Il mio computer non ha altoparlanti. Può emettere un segnale acustico.

Risposta accettata:

La cosa più semplice che posso immaginare qui è usare una seconda sessione SSH per inoltrare un FIFO denominato. Presumo che tu abbia un tmp/ nella tua home directory; sentiti libero di mantenere la FIFO dove vuoi.

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 &

Quindi puoi lasciare che venga eseguito in background mentre apri una seconda sessione SSH per fare il tuo vero lavoro:

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

…dove remote_alert è un alert modificato alias con notify_send --urgency=low -i sostituito con cose che echeggiano alla FIFO.

Funzionerà con un set minimo di strumenti sulla macchina remota:solo utilità ssh e POSIX standard. Tuttavia, con un FIFO, se dimentichi di eseguire il tuo lettore (o il tuo lettore muore), il tuo scrittore si bloccherà. Quindi se ti capita di avere socat disponibile, puoi renderlo un po' più clemente:

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. Come scaricare e caricare file su SSH

  2. Ssh:come inoltrare X su Ssh per eseguire applicazioni grafiche in remoto?

  3. Come faccio a importare un database su SSH su cPanel?

  4. Come posso esportare un database su SSH su cPanel?

  5. Come differenziare le directory su ssh

SSHFS:come montare file system remoti su SSH

Come eseguire i comandi Linux su un sistema remoto su SSH

Come utilizzare SSHFS per montare directory remote su SSH

Come trasferire file con Rsync su SSH

Come utilizzare il montaggio SSHFS con directory remote su SSH

Come copiare in remoto file su SSH senza inserire una password