リモートプロセス完了通知(ただし、電子メールは提供されません)

リモートプロセス完了通知(ただし、電子メールは提供されません)

私はOpenSSHを使用してLinuxサーバーに接続しており、サーバーでtmux長い時間がかかるコンパイル操作を実行するセッションがあります。これで、長い時間がかかるコマンドが最終的に完了したら、Linuxクライアント(接続されたコンピュータ)からすぐに通知を受けたいと思います。

ローカルではポップアップの使い方、再生方法などを知っています。(1)、(2)特定のコマンドを実行して通知を受け取ります。これで、リモートで同じことを行う必要があります。完璧なソリューションは一種のフィードバックチャネルですが、ssh私はそのような機能を全く知りません。

そして(3)で提案されたEメールベースのソリューションを使用しないでください。私はすでに仕事用の電子メールをあまりにも受け取っており、読んで、保存、転送、返信するのではなく、確認用の電子メールの数を減らそうとしています。 (私はこれを行うために別々の電子メールアカウントを作成しました。リアルタイムの通知を受け取ることはできません)。


  1. https://superuser.com/questions/345447/how-can-i-trigger-a-notification-when-a-job-process-ends
  2. https://askubuntu.com/questions/277215/make-a-sound-once-process-is-complete
  3. 実行中のプロセスが完了したら通知

ベストアンサー1

SSH接続がまだ存在する場合はそれを使用できますport forwarding。 2台のコンピュータを呼び出します。そのうちlaptopserver後者は長期実行ジョブを実行しています。私の考えでは、これの最大の利点は、コーヒーショップからラップトップに接続するのと同じ一時的な設定にあると思います。このユースケースでは、NATの背後で実行され、PNPを使用してポートを開くことができない可能性があります。通常、サーバーに何もインストールする必要はありません。これが適用されない場合は、ノートブックのSSHサービス設定に関するアドバイスに従ってください。

ラップトップからSSHを呼び出し、リモートTCPポート4000をローカルポート5000に転送するように要求します。実際、両端で同じポート番号を使用します。私は何が起こっているのかをより明確にするために別のポート番号を使用しました。ここではopensshコマンドラインを使用します。

ssh -R 4000:127.0.0.1:5000 username@server

tmux に接続してジョブを開始し、完了したらポート 4000 に書き込むように長期実行ジョブをスケジュールします。

(long_running job with params ; echo "$?" > /dev/tcp/127.0.0.1/4000) &

/dev/tcpがなく、シェルでエミュレートされていない場合は、次のようなものを使用できます。echo "$?" | netcat 127.0.0.1 4000

同時に、ラップトップはおそらく別のウィンドウでポート5000の接続を受信して​​います。

netcat -l -p 5000; do_something_to_alert_the_local_user.

netcatは、サーバーが暗号化されたSSHトンネルを介してポート5000に転送されるポート4000に接続するのを待つことをブロックします。エコー終了時に接続を閉じるとローカルがnetcat終了し、do_something_to_alert_the_local_user が実行されます。

おすすめ記事