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に非常に慣れていません。
ありがとう、アン
次のいずれかを実行すると、grepを1つだけ無視できます。
ps -ef | grep test1.sh | grep -v grep
そうしないと:-
ps -ef | grep "[t]est1.sh"
2つ目は下降しており、時間を大幅に節約できます。
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
これは、grep
とps
が並行して起動され、ターゲット文字列test1.sh
がgrep
の引数として表示されるため、ps
プロセスが一致するために発生します。これを回避する簡単だがおそらく最適ではない方法は次のとおりです。
ps -ef | grep "test1.sh" | grep -v "grep"
2番目のパイプは、最初のパイプの出力を受け取り、文字列「grep」に一致する行を除外します。