GNU/Linux >> Znalost Linux >  >> Linux

Jak upozornit na dokončení dlouhého úkolu přes Ssh?

Moje plocha je Ubuntu, která má šikovný program notify-send , který na ploše vyskočí upozornění. Má také vestavěný následující praktický alias:

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

To znamená, že můžete spustit příkaz very-long-running-command; alert , ponechte terminál spuštěný na pozadí a po dokončení úkolu obdržíte upozornění.

Když jste na serveru CentOS přes ssh, věci jsou trochu složitější. Zde je jeden způsob, jak to udělat:

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

Po určité době to funguje, ale ukončení po každém příkazu není obecně to, co chci.

Můj počítač nemá reproduktory. Může pípat.

Přijatá odpověď:

Nejjednodušší věc, kterou si zde dokážu představit, je použít druhou relaci SSH k předání pojmenovaného FIFO. Předpokládám, že máte tmp/ ve vašem domovském adresáři; můžete si FIFO nechat, kdekoli chcete.

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 &

Pak to můžete nechat běžet na pozadí, zatímco otevřete druhou relaci SSH, abyste mohli dělat svou skutečnou práci:

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

…kde remote_alert je upravené alert alias s notify_send --urgency=low -i nahrazeno ozvěnou věcí do FIFO.

To bude fungovat s minimální sadou nástrojů na vzdáleném počítači:pouze ssh a standardními nástroji POSIX. Pokud však s FIFO zapomenete spustit čtečku (nebo vaše čtečka zemře), váš zapisovač se zasekne. Pokud tedy náhodou máte socat k dispozici, můžete to udělat trochu shovívavější:

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. Ssh – Jak předat X přes Ssh, aby bylo možné vzdáleně spouštět grafické aplikace?

  2. Jak některé aplikace přijímají kliknutí myší v Bash přes Ssh?

  3. Jak tunelovat HTTP přes SSH přes SOCKS?

  1. Jak ukončím připojení SSH?

  2. SSH - Jak zahrnout příkaz -t do souboru ~/.ssh/config

  3. Jak povolit barvu ve Vimu přes SSH?

  1. Jak stahovat a nahrávat soubory přes SSH

  2. Jak zabít příkazový řádek Chromium přes Ssh?

  3. Jak importuji databázi přes SSH na cPanel?