web-dev-qa-db-ja.com

OSXでリモート端末から通知をトリガーするにはどうすればよいですか

リモートシェルで長いプロセスを実行しています。プロセスが完了したら通知をトリガーしたいと思います。 この回答 longコマンドはリモートサーバー上にあり、terminal-notifierを呼び出すことができないため、十分ではありません。

ITerm2トリガーを使用することで、希望する結果に近づくことができます。たとえば、リモートサーバーで次を実行し、__ FINISHED__のiTerm2トリガーを設定した場合:

./long_process && echo "\__FINISHED__"

これには、エディターまたはコード(emacsシェルでコードを実行している)でこのコマンドにスクロールバックするたびに通知がトリガーされるという望ましくない機能があります。

1つの解決策は、iTerm2が認識するある種のテキスト通知ですが、それはemacsスクロールバックバッファーには表示されません。

4
pnj

必要な通知の種類やリモートサーバーが実行しているOSを指定していないため、ここでいくつかの仮定を行う必要があります。通知され、リモートサーバーが* nixのフレーバーを実行している限り、通知の種類はあまり気にしないと思います。

  1. 自分にメールを送ってください。サーバーでsendmailが構成されている場合は、次のことができます。

    ./long_process && echo "Job done" | sendmail [email protected]
    
  2. ローカルマシンにsshで戻り(これが可能であると仮定して)、それがあなたに話しかけるようにします。 OSXのビープ音を鳴らすもっとクールな方法については、 ここ を参照してください。

    ./long_process && ssh [email protected] say "Yo! All done"
    

    または

    ./long_process && ssh [email protected] terminal-notifier -message "Job finished!" -title "Info"
    

    動的IPから接続していて、その動的IPにsshできるようにルーターを構成している場合は、これを行うことができます(現在リモートマシンからのみ接続されています):

    ip=$(who | grep $USER | Perl -lne 's/\\((.+?)\\)\s*$//; print "$1"' | tail -n 1) &&
     ./long_process && ssh you@$ip terminal-notifier -message "Job finished!" -title "Info"
    

    通常の方法 でパスワードなしのsshを設定できます。動的IPの影響を受けないようにする必要があります。これを行うと、上記のコードが機能します。

  3. pushover を使用して、AndroidまたはiOSデバイス(ある場合))に通知を送信します

    ./long_process && pushover.pl "All done"
    
6
terdon

リモート端末でechoベル-\aを実行できます:./long_process ; echo -e '\a'

一部のターミナルエミュレータは、ある種のサウンドを再生し、通知を表示する場合があります。特にiTerm2は、プロセスのタブがフォーカスされていない場合、通知を表示してサウンドを再生します。

また、コマンドを区切るために;を使用したことに注意してください。このようにして、コマンドがゼロ以外のステータスを返した場合でも通知されますが、&&はコマンドが成功した場合にのみ実行されます。

2
KarolisL