收集运行的所有shell脚本的统计信息

时间:2013-12-18 21:55:37

标签: bash shell unix

我刚刚开始为一家公司工作,他们使用“自制”调度程序在他们的批处理上运行了数百个shell脚本,其他一些脚本由陆上/海上的某人手动运行

  • 脚本没有按照任何标准
  • 编写
  • 脚本位于不同的目录中(同样没有标准)
  • 脚本将文件输出到不同的目录(再次没有标准)

所以我正在考虑执行以下步骤来查明脚本是否超出运行,运行速度是否太快,或者生成的输出文件是否太小,太大等等:

  1. 收集统计数据
  2. 创建我的支票
  3. 报警
  4. *如果不触及任何现有的unix脚本,就可以 * **** < / p>

    1 - 创建一个新的shell脚本,该脚本将监视所有正在运行的其他脚本,并实时创建/更新以下文件(每天1个文件)

    Script Name                         pid       StartTime               EndTime                 Elapsed time       Output files  
    /app/scripts/scriptA.sh  -x 222    1234     18/12/2013 12:00:00  18/12/2013 12:01:00     00:01:00         /app/data/customers222_20131218120000.dat     
                                                                                                               /app/data/temp/customers222_20131218120000.dat
    
    /app/scripts/scriptA.sh  -x 222    2223     18/12/2013 14:00:00  18/12/2013 14:01:00     00:01:00         /app/data/customers222_20131218140000.dat     
                                                                                                               /app/data/temp/customers222_20131218140000.dat
    
    /app/scripts/scriptA.sh  -x 333    1235     18/12/2013 12:00:00  18/12/2013 12:01:00     00:20:00         /app/data/customers222_20131218120000.dat  
    
    /app/scripts/scriptB.sh -y 8888    1236     18/12/2013 13:00:00  18/12/2013 13:00:05     00:00:05         /app/data/suppliers888_20131318130005.dat  
    

    2 - 在数据库中加载monitor_running_scripts_YYYYMMDD.dat以构建我的统计信息或者使用文件 收集统计数据几天后,我会知道

    /app/scripts/scriptA.sh -x 222输出2个文件,avarage运行时间为1分钟 /app/scripts/scriptA.sh -x 333输出2个文件,avarage运行时间为20分钟

    3 - 创建警报触发器

    • 如果/app/scripts/scriptB.sh花了不到1分钟的时间运行,那么发送电子邮件给支持团队看看吧
    • 如果/app/scripts/scriptB.sh运行时间超过5分钟,请发送电子邮件给支持团队看一看

    如果步骤1已经到位,我没有任何问题需要构建步骤2和3。所以我想听听一些关于如何开始执行第1步的建议

    操作系统:AIX

1 个答案:

答案 0 :(得分:1)

基本上你可以用包裹shell执行和日志到该文件的脚本替换/bin/bash/bin/sh或任何shell。包装bash可能看起来像:

# backup shell
cp /bin/bash{,_orig}
# create wrapper (overwrite shell)
cat <<EOF > /bin/bash
#!/bin/bash_orig

# get starting time
time_start=$(date)
command="$0"

# start original shell
bash_orig $@
pid=$!

# stop time
time_stop=$(date)

# write to log
echo "$command $pid $time_start $time_stop" >> monitor.log
EOF

如果你的系统上有更多的shell,它需要更多关注,但这应该指向正确的方向。

如果您曾经完成监控,可以使用以下方法禁用此功能:

mv /bin/bash{_orig,}

取回原始外壳。