read data from subprocess, but it's bad for shell scripts

This commit is contained in:
Kun Huang 2015-10-23 04:56:29 +08:00
parent 52438cfe6f
commit 3ec61813cf
2 changed files with 27 additions and 17 deletions

View File

@ -7,6 +7,7 @@ import json
from scalpels.db import api as db_api from scalpels.db import api as db_api
import subprocess import subprocess
import time import time
import signal
def _parse_agents_from_args(config): def _parse_agents_from_args(config):
parsed_agents = set() parsed_agents = set()
@ -32,8 +33,9 @@ def _parse_agents_from_file(config):
return parsed_agents return parsed_agents
# TODO this map should be saved in a config file # TODO this map should be saved in a config file
# TODO refar to pre/exec/post
agents_map = { agents_map = {
"mysql": "", "mysql": "bash /opt/stack/scalpels/scripts/mysql-live.sh",
"rabbit": "", "rabbit": "",
"traffic": "", "traffic": "",
"rpctraffic": "", "rpctraffic": "",
@ -47,13 +49,15 @@ def run(config):
for ag in agents: for ag in agents:
ag_exec = agents_map.get(ag) ag_exec = agents_map.get(ag)
if ag_exec: if ag_exec:
ag_p = subprocess.Popen(ag_exec, stdout=subprocess.PIPE) ag_p = subprocess.Popen(ag_exec.split(), stdout=subprocess.PIPE)
running_agents.append(ag_p) running_agents.append(ag_p)
time.sleep(15) time.sleep(5)
data = [] data = []
for ag_p in running_agents: for ag_p in running_agents:
stdout = ag_p.communicate()[0] # shell scripts has depend child which can't be killed by subprocess' API
ag_p.terminate() # it should be ag_p.kill()
os.system("pkill -P %s" % ag_p.pid)
stdout = ag_p.stdout.read()
data.append(stdout) data.append(stdout)
rets = [] rets = []
ret = db_api.result_create(data) ret = db_api.result_create(data)

View File

@ -11,7 +11,20 @@ log_switch_var=general_log
log_file=/tmp/mysqllive.log log_file=/tmp/mysqllive.log
old_log_file=`mysql -e "SELECT @@$log_file_var" | grep -v $log_file_var | grep -v '\-\-\-\-\-'` old_log_file=`mysql -e "SELECT @@$log_file_var" | grep -v $log_file_var | grep -v '\-\-\-\-\-'`
old_log_switch=`mysql -e "SELECT @@$log_switch_var" | grep -v $log_switch_var | grep -v '\-\-\-\-\-'` old_log_switch=`mysql -e "SELECT @@$log_switch_var" | grep -v $log_switch_var | grep -v '\-\-\-\-\-'`
trap ':' INT
reset () {
echo -------------------------------------
echo reset $log_file_var to $old_log_file
echo reset $log_switch_var to $old_log_switch
mysql -e "SET GLOBAL $log_switch_var = $old_log_switch;"
mysql -e "SET GLOBAL $log_file_var = '$old_log_file';"
echo remove $log_file
echo -------------------------------------
sudo rm $log_file
}
trap "reset" SIGINT SIGTERM
echo ------------------------------------- echo -------------------------------------
echo reserve $log_file_var: $log_file echo reserve $log_file_var: $log_file
@ -21,8 +34,11 @@ echo -------------------------------------
mysql -e "SET GLOBAL $log_file_var = '$log_file';" mysql -e "SET GLOBAL $log_file_var = '$log_file';"
mysql -e "SET GLOBAL $log_switch_var = ON;" mysql -e "SET GLOBAL $log_switch_var = ON;"
sleep 1
sudo chmod +r $log_file
# TODO use awk /reg/ statement instead # TODO use awk /reg/ statement instead
sudo tailf $log_file | awk '{ tailf $log_file | awk '{
if ( $1 + 0 != $1 ) if ( $1 + 0 != $1 )
# TODO cat this line on its above line # TODO cat this line on its above line
print $0; print $0;
@ -37,13 +53,3 @@ else
{ $1=$2=""; print $0; print ""} { $1=$2=""; print $0; print ""}
} }
' '
echo -------------------------------------
echo reset $log_file_var to $old_log_file
echo reset $log_switch_var to $old_log_switch
mysql -e "SET GLOBAL $log_switch_var = $old_log_switch;"
mysql -e "SET GLOBAL $log_file_var = '$old_log_file';"
echo remove $log_file
echo -------------------------------------
sudo rm $log_file