web-dev-qa-db-ja.com

スクリプトが実行されていることの確認

5分ごとに実行するジョブtest.shスケジュールと、12.30pm、@ 12.30に実行するようにスケジュールされた別のジョブtest1.shがあり、両方のジョブが実行され、デッドロックを引き起こしています。だから私はtest.shが実行しているジョブを確認する必要があります:

ps -ef | grep test1.sh

ただし、同じコマンドの行が生成されるため、これは常に正しいようです。

  # ps -ef | grep test1.sh
team 24896   607  0 11:55 pts/11   00:00:00 test1.sh
team 24925   523  0 11:55 pts/4    00:00:00 grep test1.sh

grepの出力を回避する方法test1.sh

私はunixに非常に慣れていません。

ありがとう、アン

4
Ann

次のいずれかを実行すると、grepを1つだけ無視できます。

ps -ef | grep test1.sh | grep -v grep

そうしないと:-

ps -ef | grep "[t]est1.sh"

2つ目は下降しており、時間を大幅に節約できます。

2
Ashwin

ps出力をgrepにパイプするのではなく、実行されているかどうかを確認するだけの場合は、pgrepを使用できます。これはプロセスのPIDのみを出力し、はるかに効率的になります。 -xフラグを使用して、test1.shと完全に名前が一致するようにします

pgrep -x test1.sh
876

コマンド名も確認したい場合は、-lフラグを使用することもできます。

pgrep -xl test1.sh
876 test1.sh

また、部分一致を実行する場合は、-xを削除するだけです。

pgrep -l test
876 test1.sh
877 test2.sh
888 test123.sh
8745 test.bin
4
Zachary Brady

これは、greppsが並行して起動され、ターゲット文字列test1.shgrepの引数として表示されるため、psプロセスが一致するために発生します。これを回避する簡単だがおそらく最適ではない方法は次のとおりです。

ps -ef | grep "test1.sh" | grep -v "grep"

2番目のパイプは、最初のパイプの出力を受け取り、文字列「grep」に一致する行を除外します。

1
Valentin B.