実行中のプロセスが完了したら通知

実行中のプロセスが完了したら通知

以下は、プロセスが完了/終了したときに通知を受けることに関するいくつかの質問と答えです(12) - しかし、これらはすべてユーザーがそのプロセスを自分で起動したと仮定しているため、管理スクリプトに組み込まれているアラートを使用してスクリプトを作成したり、プロセスをアラートに渡すことができます。

私の状況は、ユーザーが初期化していないプロセスの完了/終了に関する警告を受けたいと思います。つまり、私はUbuntu 12.04 LTSサーバーで多数のビデオファイルをバッチ処理しています。これらのファイルの一部の操作には時間がかかるため、特定のタスクが完了したら何らかの通知(電子メールが良いでしょう)を受け取りたいと思います。時間がかかりすぎるので、PITに基づいて一度に手動で実行するのは完璧です。

より多くの情報を提供するために - 私は特に大きなファイルを扱っています。このスクリプト自体はPythonスクリプトです(非常に複雑で、私が書いたものではなく、私が書いたいくつかのことがあります)。修正したくありません。これが最初の論理的アプローチですが)。実行中のPythonスクリプトのPIDをパラメータとしてコマンドまたはスクリプトを実行し、そのPIDを持つプロセスが実行されなくなったときに警告スクリプトにそのアクションを実行させることを想像してください。

どんなアイデアがありますか?

答え1

このような?

(while kill -0 $pid; do sleep 1; done) && echo "finished"

$pidプロセスIDとecho "finished"プロセスが終了したときに実行するアクションに置き換えます。

たとえば、

(while kill -0 $pid; do sleep 1; done) && mail ...

答え2

私は書いたprocess_watcher.py

process_watcher --pid 1234 --to [email protected]

現在のメール本文は次のとおりです。

PID 18851:/usr/lib/libreoffice/program/soffice.bin --writer --splash-pipe=5
開始:3月10日木曜日18:33:37終了:3月10日木曜日18:34:26(期間 0:00 :49)
メモリ(現在/ピーク) - 常駐: 155,280 / 155,304 kB 仮想: 1,166,968 / 1,188,216 kB

[+] indicates the argument may be specified multiple times, for example:
 process-watcher -p 1234 -p 4258 -c myapp -c "exec\d+" --to [email protected] --to [email protected]

optional arguments:
  -h, --help            show this help message and exit
  -p PID, --pid PID     process ID(s) to watch [+]
  -c COMMAND_PATTERN, --command COMMAND_PATTERN
                        watch all processes matching the command name. (RegEx pattern) [+]
  -w, --watch-new       watch for new processes that match --command. (run forever)
  --to EMAIL_ADDRESS    email address to send to [+]
  -n, --notify          send DBUS Desktop notification
  -i SECONDS, --interval SECONDS
                        how often to check on processes. (default: 15.0 seconds)
  -q, --quiet           don't print anything to stdout

改善が必要な場合は、GitHub問題を生成してください。

答え3

私は&&最初のコマンドが正常に完了した後に2番目のコマンドを実行するのに慣れています。ここにいくつかの例があります。

  1. 大きなフォルダを削除し、ビープ音が鳴ります。

    rm -rv ~/tmp && beep
    
  2. カーネルをコンパイルして電子メールを送信します。

    make && mail -s "Compilation is done" [email protected]
    

これはあなたの問題に対する良い解決策ですか?別のケースでは、||失敗した場合に備えて3番目のコマンドを追加できます。

さらに、シェルスクリプトは以下を受け取ることができます。終了ステータス$?)コマンドを使用して何度も何度もif/else何ができますか?

答え4

プロセスが終了したら、コンピュータにテザリングする必要がないようにAndroid携帯に通知を送信するアプリを作成しました。

インストールして;notifier.shコマンドの最後に追加します。

たとえば、コマンドがある場合は、make install次のコマンドを実行します。

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

関連情報