LOGROTATE_IOSTAT=/etc/logrotate.d/iostat LOGROTATE_IOTOP=/etc/logrotate.d/iotop LOGROTATE_SAR=/etc/logrotate.d/sar LOGROTATE_NETSTAT=/etc/logrotate.d/netstat # todo # SYSTEMD_PATH=/usr/lib/systemd/system/watcher.service
new_date() { date '+%Y-%m-%d-%H-%M-%S' }
function run_iotop() { # time-stamp, batch, only process ret=`iotop -tboP -d $interval | tee -a $logger` if [[ $? -eq 0 ]]; then echo "done ..." | tee -a $logger exit fi }
run_iostat() { while true; do ret=`iostat -t -y -d $interval | tee -a $logger` if [[ $? -eq 0 ]]; then echo "done ..." | tee -a $logger exit fi done }
run_netstat() { ret=`netstat -s $interval | tee -a $logger` if [[ $? -eq 0 ]]; then echo "done ..." | tee -a $logger echo >&3 exit fi }
run_sar() { while true; do ret=`sar -n ETCP $interval | tee -a $logger` if [[ $? -eq 0 ]]; then echo "done ..." | tee -a $logger exit fi done }
main() { if [[ $# -lt 1 ]]; then show_usage exit 1 fi
script_name=$0 ARGS=$(getopt -o i:,f:,o:,c:,h --long cmd:,operate:,interval:,log-file:,help, -- "$@") if [[ $? -ne 0 ]]; then echo "parse params error." show_usage exit 1 fi eval set -- "${ARGS}" while true; do case $1 in -c | --cmd) cmd=$2 shift 2 ;; -o | --operate) operate=$2 shift 2 ;; -i | --interval) interval=$2 shift 2 ;; -f | --log-file) logger=$2 shift 2 ;; -h | --help) show_usage exit ;; --) shift break ;; *) show_usage exit 2 ;; esac done
if [[ -z $logger ]]; then logger=$(new_date)-${cmd}.log fi if [[ -z $interval ]]; then interval=1 fi # iostat if [[ $cmd == "iostat" && $operate == "start" ]]; then setup_logroate $logger $LOGROTATE_IOSTAT run_iostat & fi if [[ $cmd == "iostat" && $operate == "stop" ]]; then stop_iostat $script_name fi # iotop if [[ $cmd == "iotop" && $operate == "start" ]]; then setup_logroate $logger $LOGROTATE_IOTOP run_iotop & fi if [[ $cmd == "iotop" && $operate == "stop" ]]; then stop_iotop $script_name fi # netstat if [[ $cmd == "netstat" && $operate == "start" ]]; then setup_logroate $logger $LOGROTATE_NETSTAT run_netstat & fi if [[ $cmd == "netstat" && $operate == "stop" ]]; then stop_netstat $script_name fi # sar if [[ $cmd == "sar" && $operate == "start" ]]; then setup_logroate $logger $LOGROTATE_SAR run_sar & fi if [[ $cmd == "sar" && $operate == "stop" ]]; then stop_sar $script_name fi