3

サーバーのヘルスチェック用のシェルスクリプトを作成しようとしています。使用するコマンドは別のファイルにあり、コマンド ライン引数としてスクリプトに渡されます。
このファイルは 1 行ずつ読み取られます。私のスクリプトは次のとおりです。

#!/bin/bash
set -x   # DEBUG MODE
FILENAME=$1
count=0
echo "Executing commands on `hostname`"
echo "The commands output can be found in /tmp/`hostname`_hc.txt"
echo "########### `hostname` ############ " > /tmp/`hostname`_hc.txt
while IFS= read COMMAND
do
let count++ 
echo >> /tmp/`hostname`_hc.txt  
echo "###################################################################" >> /tmp/`hostname`_hc.txt
echo "###################################################################" >> /tmp/`hostname`_hc.txt    
echo "$count : $COMMAND" >> /tmp/`hostname`_hc.txt
$COMMAND >> /tmp/`hostname`_hc.txt
echo "####################################################################" >> /tmp/`hostname`_hc.txt
echo "####################################################################" >> /tmp/`hostname`_hc.txt
echo >> /tmp/`hostname`_hc.txt
done < $FILENAME
echo "Commands executed on `hostname` " 

サンプル サーバーのヘルスチェック コマンドは次のとおりです。

df -ak
vmstat 5 5
ls -lrt /opt/config/ | grep -i ss7
prtdiag -v 
ps -ef | grep ss7
swap -s
dmesg| grep "`date +%b %d`" | grep "swap space limit exceeded"
dmesg|grep -i ECC

このスクリプトを実行すると、"|" を使用するコマンドでこれらのエラーが発生します。パイプが使用されます:

為にls -lrt /opt/config/ | grep -i ss7

ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
ls: cannot access ss7: No such file or directory

同様に、 の場合ps -ef | grep ss7、このエラー メッセージが表示されます

ERROR: Garbage option.
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy
4

1 に答える 1

2

おそらく変更する必要があります

$COMMAND >> /tmp/`hostname`_hc.txt

eval $COMMAND >> /tmp/`hostname`_hc.txt
于 2013-01-19T09:12:26.883 に答える