GNU/Linux >> Linux の 問題 >  >> Linux

Sshを介した長いタスクの完了を警告する方法は?

私のデスクトップはUbuntuで、便利なプログラムnotify-sendがあります 、デスクトップにアラートをポップアップします。また、次の便利なエイリアスが組み込まれています。

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

これは、very-long-running-command; alert 、端末をバックグラウンドで実行したままにし、タスクが完了したときに通知を受け取ります。

sshを介してCentOSサーバーを使用している場合は、少し注意が必要です。これを行う1つの方法は次のとおりです。

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

これは流行の後で機能しますが、すべてのコマンドの後で終了することは、一般的に私がやりたいことではありません。

私のコンピューターにはスピーカーがありません。ビープ音が鳴ります。

承認された回答:

ここで想像できる最も簡単なことは、2番目のSSHセッションを使用して名前付きFIFOを転送することです。 tmp/があると思います あなたの家のディレクトリで;好きな場所にFIFOを自由に保管してください。

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 &

次に、2番目のSSHセッションを開いて実際の作業を行うときに、これをバックグラウンドで実行させることができます。

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

…ここでremote_alert 変更されたalertです notify_send --urgency=low -iのエイリアス FIFOにエコーするものに置き換えられました。

これは、リモートマシン上の最小限のツールセットで機能します。sshおよび標準のPOSIXユーティリティのみです。ただし、FIFOを使用すると、リーダーの実行を忘れた場合(またはリーダーが停止した場合)、ライターがハングします。したがって、socatがある場合 利用可能であれば、これをもう少し寛容にすることができます:

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経由でファイルをダウンロードおよびアップロードする方法

  2. Ssh –グラフィックアプリケーションをリモートで実行するためにX over Sshを転送する方法は?

  3. 一部のアプリケーションは、Sshを介したBashでのマウスクリックをどのように受け入れますか?

  1. cPanelでSSH経由でデータベースをインポートするにはどうすればよいですか?

  2. cPanelでSSH経由でデータベースをエクスポートするにはどうすればよいですか?

  3. SOCKS 経由で HTTP over SSH をトンネリングする方法は?

  1. SshでChromiumコマンドラインを強制終了する方法は?

  2. 直接イーサネット接続を介して SSH 経由でデバイスに接続する方法

  3. SSH - ~/.ssh/config ファイルに -t コマンドを含める方法