3

Nagiosを使用して監視したいプロセスを開始するためのPythonスクリプトがあります。そのスクリプトを実行ps -efしてubuntuEC2インスタンスで実行すると、プロセスがとして表示されpython <filename>.py --argumentsます。Nagiosがcheck_procsを使用してそのプロセスを監視するには、プロセス名を指定する必要があります。ここで、プロセス名は「python」になります。

/usr/lib/nagios/plugins/check_procs -C python

1つのPythonプロセスが実行している出力を返します。これは、1つのPythonプロセスを実行している場合は問題ありません。ただし、複数のPythonスクリプトを実行していて、監視するのが少数の場合は、その特定のプロセス名を指定する必要があります。上記のコマンドでPythonスクリプト名を指定すると、エラーがスローされます。python <filename>.py --argumentsしたがって、check_procsの実行中にその新しい名前を付けることができるように、全体を別の名前にマスクしたいと思います。

誰かアイデアがあれば教えてください。setproctitleを使用してPythonプロセス名を変更することを提案する他のスタックオーバーフローの質問を確認しましたが、シェルを使用して実行したいと思います。

よろしく、

サンケット

4

6 に答える 6

4

check_procsコマンドを使用して、モジュール名を含む引数を確認できます。次のコマンドは、Pythonモジュール'module.py'が実行されているかどうかを通知します。

/usr/lib/nagios/plugins/check_procs -c 1:1 -a module.py -C python

-c引数を使用すると、クリティカル範囲を設定できます。実行中のプロセスに一致するプロセスが1つより多いか少ない場合、1:1はクリティカルステータスをトリガーします。

-a引数は、引数'module.py'を含むプロセスに基づいてフィルタリングします(監視するモジュールの名前に変更します)

-C引数は、プロセスがPythonプロセスであることを確認します

サービス定義を作成する方法を理解するのに助けが必要な場合は、私もそれを理解する必要がありました。私に知らせて。

参照:check_procsプラグインのマンページ http://nagiosplugins.org/man/check_procs

于 2012-02-28T18:41:36.957 に答える
2

プロセス名を純粋なPythonから変更することはできませんが、ラッパー(たとえば、Cで記述されたもの)を使用して変更することはできます。

ただし、代わりに行うべきことは、プログラムをデーモンにし、pidfileを使用することです。pythonDaemonAPIとその実装python-daemonを見てください。

于 2012-01-25T13:09:56.937 に答える
1

check_procsはすでにこの状況を処理しています。

check_procsは、インタープリターへの引数として起動されたスクリプトと、ハッシュバンインタープリターを直接実行するジョブの違いを識別できます。これらは両方ともps出力で同じように見えますが!! check_procs -C python後者の場合は! にリストされません。

python:を介してスクリプトを明示的に実行する場合は、。を使用してスクリプトpython <filename.py>を監視できますcheck_procs -C python -a filename.py

#!/usr/bin/pythonスクリプトを挿入してとして実行すると、./filename.pyで監視できますcheck_procs -C filename.py

この動作を示すコマンドラインセッションの例:

#make test.py directly executable.  See code below
$ chmod a+x test.py

#launch via python explicitly:
$ /usr/bin/python ./test.py &
[1] 27094
$ check_procs -C python && check_procs -C test.py && check_procs -a test.py
PROCS OK: 1 process with command name 'python'
PROCS OK: 0 processes with command name 'test.py'
PROCS OK: 1 process with args 'test.py'

#launch via python implicitly
$ ./test.py &
[2] 27134
$ check_procs -C python && check_procs -C test.py && check_procs -a test.py
PROCS OK: 1 process with command name 'python'
PROCS OK: 1 process with command name 'test.py'
PROCS OK: 2 processes with args 'test.py'

#PS 'COMMAND' output looks the same
$ ps 27094 27134
  PID TTY      STAT   TIME COMMAND
27094 pts/6    S      0:00 /usr/bin/python ./test.py
27134 pts/6    S      0:00 /usr/bin/python ./test.py

#kill the explicit test
$ kill 27094 
[1]  - terminated  /usr/bin/python ./test.py                                                                           
$ check_procs -C python && check_procs -C test.py && check_procs -a test.py
PROCS OK: 0 processes with command name 'python'
PROCS OK: 1 process with command name 'test.py'
PROCS OK: 1 process with args 'test.py'

#kill the implicit test
$ kill 27134
[2]  + terminated  ./test.py                                                                                           
$ check_procs -C python && check_procs -C test.py && check_procs -a test.py
PROCS OK: 0 processes with command name 'python'
PROCS OK: 0 processes with command name 'test.py'
PROCS OK: 0 processes with args 'test.py'

test.pyは、2分間スリープするPythonスクリプトです。これはchmod+xであり、#!/ usr / bin/pythonを呼び出すハッシュバン行があります。

#!/usr/bin/python
import time
time.sleep(120)
于 2012-04-19T16:19:45.410 に答える
0

subprocess.Popenを使用して実行可能ファイル名を変更できますが、ラッパースクリプト(または奇妙なフォークマジック)を使用する必要があります。次のコードにより、実行可能ファイルが次の代わりにpsリストされます。kwyjibo /tmp/test.py/usr/bin/python /tmp/test.py

import subprocess
p = subprocess.Popen(['kwyjibo', '/tmp/test.py'], executable='/usr/bin/python')
于 2012-01-26T16:41:22.013 に答える
0

pidファイルを作成し、そのファイルをnagiosでのプロセスルックアップに使用します。

于 2012-01-25T13:12:12.100 に答える
0

これが最善の解決策であるとは言いませんが(まったく拡張性がありません)、pythonコマンドへのシンボリックリンクを作成し、このリンクを使用してスクリプトを実行できます。例えば

ln -s `which python` ~/mypython
~/mypython myscript.py

リンクを使用して起動されたスクリプトは、のように表示されmypythonますps

于 2012-01-25T18:39:07.327 に答える