サーバーでプロセスが実行されているかどうかを確認する必要があります。しかし、課題は、私が使用しているキーワードがユーザーIDではなく、o/pまたはpsコマンドの一部であることです。
ps -ef | grep -v $$ | grep xenon
として実行すると、次のようになります
エラー:ガベージオプション
使用法:ps [オプション]
追加のヘルプテキストについては、「ps --help」または「ps --help」を試してください。
詳細については、ps(1)を参照してください。キセノンが実行されていません。エラーを確認してください:ガベージオプション
サーバーで、何らかの理由でpgrep
のo/pが表示されないため、問題が解決します。彼はサーバーからのo/pです。
$ps -ef | grep xenon
venom 3157 95310 0 23:08 pts/5 00:00:00 grep --color=auto xenon
root 45943 1 0 Apr12 ? 00:17:47 /opt/xenon/sganet/agent/lib64/sganetwatchdog -vm=/opt/xenon/sganet/agent/lib64/sganetos -logdir /opt/xenon/sganet/log -ini ../conf/ruxitwatchdog.ini
root 45981 45943 2 Apr12 ? 08:20:31 /opt/xenon/sganet/agent/lib64/sganetos -Dcom.compuware.apm.WatchDogTimeout=9000 -Dcom.compuware.apm.WatchDogPort=5000
$pgrep xenon
$pgrep -c xenon
0
$
サーバーで実行されている複数のプロセスを検証するためにチェックするために基本的に記述したスクリプトは次のとおりです。
#!/bin/bash
set +x
USER=`whoami`
#pg='ps -ef | grep -v $USER | '
pg='ps ax | grep -v grep | '
#--------function to check process ---------#
check_process() {
$pg $1 >/dev/null && echo -e "$1 is running" || echo -e "$1 is not running, please check "
}
#--------Checking process on the server---------#
echo -e "\n\n checking the processes"
check_process xenon
check_process upnew
シェルパラメータの展開が発生しますafterパイプの高レベルの解析 行を構造化されたコマンドに分割するため、関数本体は記述したように実行されます
ps ax '|' grep -v grep '|'
-つまり、パイプをps
へのリテラル引数として使用します。そのため、エラーが発生しますfrom ps
(grep
ではなく!)が|
引数。
あなたはそれをいくつかの方法で修正することができます:
pg
変数を使用する代わりに、コマンドを関数に書き込むだけです。これは私にとって最良のバージョンのようですが、実際のスクリプトはより複雑になる可能性があります。そのようなものが本当に必要な場合は、代わりに関数を使用してパイプラインを含めます。
pg_cmd_1() {
ps ax | grep -v grep | $1
}
pg=pg_cmd_1
そのまま続行します。これにより、追加の関数を定義し、pg
変数を動的に変更して、必要に応じてそれらを使用できます。
さらに、現在記述されているように、スクリプトはps ax | grep -v grep | xenon
、私はまだあなたが望むものではないと思います(grep
がありませんか?)。