サーバーでプロセスが実行されていることを確認する必要があります。しかし、問題は私が使用するキーワードがuseridではなくo / pまたはpsコマンドの一部であることです。
走るときにps -ef | grep -v $$ | grep xenon
得たものは
エラー:ジャンクオプション
使用法:ps [オプション]
追加のヘルプテキストを表示するには、「ps --help」または「ps --help」を試してください。
詳細については、ps(1)を参照してください。キセノンは実行されません。エラーを確認してください:ジャンクオプション
サーバーで何らかの理由でpgrep
私の問題を解決できる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
答え1
シェルパラメータ拡張が発生します。後ろにパイプラインの高度な分析行を構造化コマンドに分割して、関数の本文が作成したとおりに実行されるようにします。
ps ax '|' grep -v grep '|'
- つまり、パイプをリテラル引数として使用しますps
。そのため、エラーが発生します。~からps
(not from grep
!)は引数を理解していないと文句を言います|
。
この問題はいくつかの方法で解決できます。
- 変数を使用する代わりに、関数にコマンドを書くだけです
pg
。これは私にとって最高のバージョンだと思いますが、実際のスクリプトはより複雑になる可能性があります。 同様のものが本当に必要な場合は、パイプを含む関数を使用してください。
pg_cmd_1() { ps ax | grep -v grep | $1 } pg=pg_cmd_1
そしてそのまま進めてください。これにより、他の関数を定義し、
pg
変数を動的に変更して、必要に応じて使用できます。
また、現在書かれているようにスクリプトが実行しようとしていますが、ps ax | grep -v grep | xenon
まだ望んでいないようです(1つが欠けていますかgrep
?)。