Linuxのシェルスクリプトは、プロセス名、カップメモリ使用量、起動時間オンライン状態形式の出力をチェックアウト実現するために、

目的は、プロセス名、カップのメモリ使用量をチェックアウトすることで、起動時間オンライン状態にフォーマット出力

脚本实现的结果:
[ルート@のZABBIX〜]#件のSH /app/shell/app_status.shの
ProcessNameの--------- GroupNameの-------ステータス----- PID ---- CPU ---- ---- MEMORY STARTIME ---
nginxのウェブ立ち止まっNULL、NULL、NULL、NULL
のhttpd WEB立ち止まっNULL、NULL、NULL、NULL
、MySQLのDBのRUNNING 3019 0.2 24.1水9月11日午前12時02分21秒2019
オラクルDB立ち止まっNULL、NULL、NULL、NULL
[ルート@ ZABBIX〜]#shの/app/shell/app_status.sh nginxの
ProcessNameの--------- GroupNameの-------ステータス----- PID ---- CPU --- -memory ---- STARTIME ---
nginxのウェブRUNNING 4262 0.0 0.1水9月11日12時18分19秒2019
nginxのウェブRUNNING 4263 0.0 0.1水9月11日12時18分19秒2019年

このスクリプトは、構成ファイル・ストレージ・パスを使用しています。/app/shell/process.cfg
process.cfgの内容を

【GROUP_LIST】
WEB
DB
HADOOP
YUM

[WEB]
nginxの
httpdの

[DB]
MySQLの
オラクル
のPostgreSQL

【HADOOP】
データノード
名前ノード
journalnode

【YUM]
のResourceManager
ノードマネージャ

スクリプトの内容:
#!/ binに/ bashの

#Func:GETステータスは、IN process.cfgをPorcess

変数の#define
HOME_DIR =「/ APP /シェル/」
CONFIG_FILE =「process.cfg」
this_pid = $$

#get_all_goup:グループのメンバーが取得する
入力パラメータなし#機能と構成ファイルprocess.cfg内のすべてのグループの構成情報を返します、などWEB、DB、など
#の

機能get_all_group
{
G_LIST = sed -n "/\[GROUP_LIST\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE}|egrep -v "(^$|\[.*\])"
エコー"$ {G_LIST}"
}
#get_all_processの
#入力パラメータなしでこの機能、およびすべてのプロセスprocess.cfgの構成ファイル情報返す
#の
機能get_all_process
{
におけるG用のget_all_group
DO
P_LIST = sed -n "/\[${g}\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE} |egrep -v "(^$|\[.*\])"
「$ {} P_LIST」エコー
DONE
}
#get_process_pid_by_nameの
#この機能は、プロセス名で一つの引数をとり、プロセスは、PIDのリストを返す、または複数であってもよい
#の
機能get_process_pid_by_name
{
[$#-ne IF 1 ];その後、
戻る1。

= PIDS ps -ef | grep $1 | egrep -v grep|grep -v $0 | awk '{print $2}'
エコー$ PIDS} {
Fiを
}
#get_process_info_by_pid
機能、PIDパラメータの処理であるパラメータを受信#は、メモリ使用量のCPUであって、リストを処理動作情報を返さ
#の
機能get_process_info_by_pidを
{
IF [ ps -ef | awk -v pid=$1 '$2==pid{print }' | wc -l-eq 1]。その後、
pro_status = "RUNNING"
他の
pro_statusは= "立ち止まっ"
Fiの
pro_cpu = ps aux | awk -v pid=$1 '$2==pid{print $3}'
pro_mem = ps aux | awk -v pid=$1 '$2==pid{print $4}'
pro_start_time = ps -p $1 -o lstart | grep -v STARTED
#echo "$ {$ {pro_cpuのpro_status} {pro_mem}} $"} $ {pro_start_timeを""
}
#is_group_in_configの
#は、この関数はパラメータを受け取り、グループの名前のパラメータ、リターンが0または1であり、構成ファイル内のグループの0代表、代表的ではない
。#
関数is_group_in_config
{
におけるGNのためにはget_all_group、実行し
、その後、[「$ {GN}」==「$ 1」] IF
返す
Fiの
DONE
「グループ$でprocess.cfgではありません1」エコー
。リターン1
}
#is_process_in_configの
すべてのプロセスの戻り値は、グループに対応する名前リストの名前です;#この関数は、グループ名のパラメータをパラメータを受け取る
#の
関数is_process_in_config
{
におけるPNのためget_all_process、やる
のIF [ PN 1 == $ $];その後、
戻り
Fiが
DONE
}
#get_all_process_by_groupの
位この関数はパラメータを受け取り、パラメータは、グループ内のすべてのプロセスのグループ名リスト0 is_group_in_configリターン名に渡される
#の
機能get_all_process_by_group
{
。is_group_in_config $ 1
IF [$? 0 -eq];その後、
P_LISTは= sed -n "/\[$1\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE} | egrep -v "(^$|^#|\[.*\])"
エコー$ {} P_LIST
他の
エコー"GROUPNAME $でないprocess.cfg IS 1。"
Fiの
}
#get_group_by_process_name
#この関数は、パラメータを受信し、パラメータ名、プロセス名、グループ内かどうかを判定するステップと、グループ名の場合は$ {GNを} get_all_process_by_group、設定されget_all_group呼び出す
#の
機能get_group_by_process_name
{
でGNのためにget_all_group、実行
中にPNためにget_all_process_by_group ${gn}、行います
次に、[。PNは==する$ $ 1] IF
エコー"$ {} GN"
Fiの
DONE
DONE
}
#format_printの
#この関数は、パラメータを受信し、パラメータは、プロセスの名前であり、表示処理ProcessNameのを--------- " "GROUPNAME -------"、 "ステータス-----"、 "PID ----"、 "CPU ----"、 "MEMORY ----"、「STARTIME ---

format_print関数
{
PSの-ef |はgrepの$ 1 |はgrep -v grepの|はgrep -v $ this_pid&>を/ dev / null。
IF、次に[?0 -eqの$]
PIDS = get_process_pid_by_name $1
$ PIDSにおけるPIDのために、DO
get_process_info_by_pid $ PID
のawk -v名= $ 1 \
-v g_name = $ 2 \
-vステータス= $ pro_status \
-v PID = $ PID \
-v CPU = $ pro_cpu \
-v MEM = $ pro_mem \
-v START_TIME = "$ {pro_start_time}" \
「「{printf関数をBEGIN%-20s%-16s %-11s%-7s%-7s%-10s%-20s \ n」は、名前、g_name、ステータス、PID、CPU、MEM、START_TIME} '
行われ
、他
のawk -v名を= $ 1 -v g_name = $ 2' {BEGIN printfの"%-20s%-16s%-11s%-7s%-7s%-10s%-20s \ n"は、名前、名前、 "立ち止まった"、 "NULL"、 "NULL"、 "NULL"、 "NULL" }」
Fiの
}
##
##
[あれば!-e $ {HOME_DIR} / $ {CONFIG_FILE}];次に
エコー"$ {CONFIG_FILEは}チェックexist..pleaseない.."
出口1
のfi
##
##
awkの「{printfのをBEGIN "%-20s%-16s%-10s%-6s%-7s%-10s%-20s \ n"は、 "ProcessNameの---------"、「GROUPNAME ---- ---」、 "ステータス-----"、 "PID ----"、 "CPU ----"、 "MEMORY ----"、 "STARTIME ---"}」
##
##
[0 $#-gt]なら、次に
もし[ "$ 1" == "-g"];次に、
シフト
の$ @にGNのために、ない
is_group_in_config $ {GN} || 継続
のpnためにget_all_process_by_group $gn、やる
is_process_in_config $ PN && format_print $ PN $ GN
終わっ
行われ
、他
の$ @のpnために、やる
GN = get_group_by_process_name $pn
is_process_in_config $ PN && format_print $ PN $ GN
行わ
Fiの
他の
のpnためにget_all_process、やる
GN = get_group_by_process_name $pn
is_process_in_config $ PN&


おすすめ

転載: blog.51cto.com/14294148/2437357