0

プロセスが実行されているかどうかを判断するために、次のコードを作成しました。

#!/bin/bash
ps cax | grep 'Nginx' > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi

コードを使用して複数のプロセスをチェックし、リストを入力として使用したいのですが(以下を参照)、foreachループでスタックします。

CHECK_PROCESS=nginx, mysql, etc

foreachループを使用して複数のプロセスをチェックする正しい方法は何ですか?

4

3 に答える 3

4

システムがインストールされている場合は、の出力のingのpgrep代わりにそれを使用することをお勧めします。grepps

プロセスのリストをループする方法については、配列を使用することをお勧めします。実用的な例は、次のようなものです。

(備考:大文字の変数は避けてください。これは非常に悪いバッシュプラクティスです):

#!/bin/bash

# Define an array of processes to be checked.
# If properly quoted, these may contain spaces
check_process=( "nginx" "mysql" "etc" )

for p in "${check_process[@]}"; do
    if pgrep "$p" > /dev/null; then
        echo "Process \`$p' is running"
    else
        echo "Process \`$p' is not running"
    fi
done

乾杯!

于 2012-11-11T12:05:46.617 に答える
2

プロセスの個別のリストを使用します。

#!/bin/bash
PROC="nginx mysql ..."
for p in $PROC
do
  ps cax | grep $p > /dev/null

  if [ $? -eq 0 ]; then
    echo "Process $p is running."
  else
    echo "Process $p is not running."
  fi

done

それらのいずれかが実行されているかどうかを確認したいだけの場合は、looは必要ありません。リストをに与えるだけgrepです:

ps cax | grep -E "Nginx|mysql|etc" > /dev/null
于 2012-11-11T12:01:20.413 に答える
1

ファイルchkproc.shを作成します

#!/bin/bash

for name in $@; do
    echo -n "$name: "
    pgrep $name > /dev/null && echo "running" || echo "not running"
done

そして、実行します:

$ ./chkproc.sh nginx mysql etc
nginx: not running
mysql: running
etc: not running

古いまたは「奇妙な」システムがない限り、 pgrepを利用できるはずです。

于 2012-11-11T12:15:34.177 に答える