shell学習-問題-悟り


213-09-06今日redisが理由もなく切断した后に任务が正常に流転することができなくて、任务の积み重ねをもたらして、直接redisを再开することを発见してからやっと问题を解决して、问题はredisが実体のメモリを使うことを设置して、ディスクを使わないで、机械のメモリが低くてredisとぶつかって、心配して、.その後、プロセスを監視するプログラムがあるべきだと思います.彼の任務は簡単です.タイミングクエリープロセスは、存在しない場合は、プログラムが異常に終了したことを示し、再起動する必要があります.この方法を使用して、私が担当しているstormプログラムのプロセスを監視します.プロセスが停止したら、すぐに起きて、タスクのフローに影響を与えません.linuxの下でshellを使用して極めて簡単なプロセス監視スクリプトを完了し、タスクで一定時間に1回実行しないように設定します.考え方:1.1つのファイル記録モニタリングプログラムのリストを使用して、モニタリング構成化を実現する.2.監視されたプログラムごとに起動プログラムのshスクリプトを書き、プログラムの使用を開始する.3.スクリプトを書いて行ごとにモニタリストファイルを読み取り、プログラム名を取得し、各プロセス名に対してコマンドpsとgrepを利用してプロセスをクエリーし、プロセスが存在しないことを発見した場合、そのプロセスを起動するスクリプトファイルを呼び出し、ログを記録する.
プロセス・リスト・ファイルの監視(1行1プロセス名):process_names
backtype.storm.daemon.nimbus  
backtype.storm.ui.core  
org.apache.zookeeper.server.quorum.QuorumPeerMain  

モニタスクリプトでプログラムのリストを読み込み、ps -efコマンドを使用してプロセスモニタスクリプト:monitor.を問合せます.sh
 #!/bin/sh  
 #        process_names        ,     ,      

 #    
log_path="./monitor.log"
 #   
base_path="."  
 #        
process_names_path="$base_path/process_names"  
 #         
process_exec_path="$base_path/process_exec"  

 #          
process_names=`cat $process_names_path | awk '{print $0"
"}'` # for process_name in ${process_names[@]} do # procnum=$(ps -ef | grep $process_name | grep -v grep | wc -l) # if [ $procnum -ne 1 ] then # echo "`date` find $process_name crash...." >> $log_path echo "`date` try start $process_name ...." >> $log_path # exec_proc="$process_exec_path/$process_name.sh" # sh $exec_proc >>$log_path fi done

モニタプロセスリストに対応する起動プロセスファイル(プログラム1起動ファイル):process_exec/backtype.storm.daemon.nimbus.sh
 #!/bin/sh  
echo "starting backtype.storm.daemon.nimbus"  
/usr/local/storm/bin/storm nimbus > /dev/null 2>&1 &  

他のプロセス起動コマンドファイルと同様です.タイミングタスクにタスクを追加し、コマンドを編集します:crontab-e
*/3 * * * * sh /data/apps/monitor-storm/monitor.sh >/dev/null 2>&1  

完了後rootユーザを使用してタイミングタスクプロファイル/etc/init.d/crond reloadを再ロード
わざとプロセスをやめて、テストの結果
これで、極めて簡単で、監視プログラムを配置することができて、通知機能のない監視プログラムが完成しました.ははは、楽しんでください.
編纂の過程で多くの苦難に直面したが、結局shellの知識が足りない原因だ.途中で問題が発生しました.モニタリストから行ごとにデータを1つの配列に簡単に読み込む方法googleは、catとawkを使用して使命を果たすことを発見します.モニタリスト配列を巡るのもgoogleが完成しました
blogに描かれている目的は記憶を深めるためで、後で調べるのに便利で、ツッコミを歓迎します注:markdownで書くため、すべて少し乱れて、その上文字は転義されて、許してください
毎日少しずつ覚えて,後日宝典になる