高度なPythonのテスト - (5)bashスクリプト監視プログラムを起動し、PIDのPythonを渡します

監視プログラム用のPythonスクリプトを実行するコマンドを見つけるHiBench:

UID PID PPID C STIME TTY TIME CMD 

ルート      32614      1   0  1602のpts / 0     000000 python2 /home/cf/app/HiBench-master/bin/functions/monitor.py HadoopSort 32331 /ホーム/ CF /アプリ/ HiBenchマスター/レポート/ ソート /hadoop/conf/../monitor.log /ホーム/ CF /アプリ/ Hの

ルート      32621  32331   0  1602のpts / 0     000000python2 /home/cf/app/HiBench-master/bin/functions/execute_with_log.py /ホーム/ CF /アプリ/ HiBench-マスター/レポート/ ソート /hadoop/conf/../bench.logは/ opt / Clouderaの/小包/ CD

Run.shは、ファイルの内容を表示します。

 17 current_dir = ` dirnameは " $ 0 " `
  18 current_dir = `CD " $のcurrent_dir "PWD `
  19 ROOT_DIR = $ {current_dir} /../../../../../
  20 workload_config = $ {ROOT_DIR} / confに/ワークロード/マイクロ/ ソートの.conf
  21" $ {ROOT_DIR} /bin/functions/load_bench_config.sh " 
 22  
 23 enter_bench HadoopSort $ {workload_config} $ {current_dir}
  24 開始show_bannar
  25  
 26 rmr_hdfs $ OUTPUT_HDFS ||を 真の
 27  
 28 SIZE =`dir_size $ INPUT_HDFS`
  29 START_TIME = ` timestamp`
  30  run_hadoop_jobの $ {HADOOP_EXAMPLES_JAR} ソート -outKey org.apache.hadoop.io.Text -outValue org.apache.hadoop.io.Text - のR $ {NUM_REDS} $ {} INPUT_HDFS $ {OUTPUT_HDFS}
  31  
 32 END_TIME = `timestamp`
  33 gen_report $ {START_TIME} $ {END_TIME} $ {SIZE}
  34 show_bannarは終了
  35 leave_benchを

run_hadoop_job()メソッドが呼び出されるstart_monitorを見つけrun.shファイルで:

関数run_hadoop_job(){ 
    ENABLE_MONITOR = 1 
    なら [ " $ 1 " = " --without-モニタ" ]。次いで
        ENABLE_MONITOR = 0 
        、シフト 1 
    Fiの
    ローカルjob_jar = $ 1 
    シフト
    ローカルJOB_NAME = $ 1 
    シフト
    ローカルtail_argumentsは = $ @
     ローカルCMD = " $ {HADOOP_EXECUTABLE} --config $ {HADOOP_CONF_DIR}ジャー$ job_jar $ JOB_NAME $ tail_arguments "
    エコー -e "$ {BGreen}のMapReduceジョブの送信:$ {緑} $ CMD $ {Color_Off} 
    であれば [$ {ENABLE_MONITOR} = 1 ]; その後、
        MONITOR_PID = ` start_monitor `
     Fiの
    execute_withlog  $ {CMDは} 
    なる?= $を
     場合は、[$ {ENABLE_MONITOR } = 1 ]; 次に
        stop_monitor $ { MONITOR_PID }
     Fiの
    場合は [$結果-ne 0 ]; 次に、
        エコー -e "$ {}育ちのエラー$ {Color_Off}:Hadoopのジョブは$ {BYellow} $ {job_jar} $ {JOB_NAME} $ {Color_Off}は正常に実行に失敗しました。" 
        エコー -e " $ {BBlueは} $ {Color_Off}ヒント:詳細なログをチェックすることができます後藤$ {BYellow} $ {WORKLOAD_RESULT_FOLDER} /bench.log$ {Color_Off}を\ nOpeningあなたのための尾を記録:。\ nを" 
        テール $ {WORKLOAD_RESULT_FOLDER} / bench.log 
        退出$結果
    Fiを
}

定義start_monitor方法を参照してください。

関数start_monitor(){
     MONITOR_PID = '$ {workload_func_bin} /monitor.py $ {HIBENCH_CUR_WORKLOAD_NAME} $$ $ {WORKLOAD_RESULT_FOLDER} /monitor.log $ {WORKLOAD_RESULT_FOLDER} /bench.log $ {WORKLOAD_RESULT_FOLDER} /monitor.html $ {} SLAVES &` 
#は     エコー " モニターを起動してしまった子のpid:$ {MONITOR_PID} " >は/ dev / stderrの
     エコー$ {MONITOR_PID} 
}

そこstop_monitorメソッドの定義:

関数stop_monitor(){
     MONITOR_PID = $ 1は 
    $アサート1  " モニタが欠落のpid " 
#は     エコー " 殺す、モニターを停止$ {MONITOR_PID} " >の/ dev / stderrを
     殺す$ {MONITOR_PID} 
}

 そしてexecute_withlogメソッドを定義します:

関数execute_withlog(){ 
    CMD = " $ @を" 
    もし [-t 1 ]。その後、          #ターミナルは、出力を美化します。
        $ {} workload_func_bin /execute_with_log.py $ {WORKLOAD_RESULT_FOLDER} / bench.log $ CMD
                              #パイプは、行いません何も。
        $ CMD 
    Fiを
}

 

おすすめ

転載: www.cnblogs.com/ratels/p/11070262.html