我有一个bash脚本中的函数,它执行一个叫做runBatch的长进程。 基本上runBatch需要一个文件作为参数,并将内容加载到数据库。 (runBatch只是加载文件内容的数据库命令的包装函数)
我的函数有一个循环,看起来像下面,我正在logging开始时间和过程的时间stream逝的variables。
for batchFile in `ls $batchFilesDir` do echo "Batch file is $batchFile" START_TIME=$(($(date +%s%N)/1000000)) runBatch $batchFile ELAPSED_TIME=$(($(($(date +%s%N)/1000000))-START_TIME)) IN_SECONDS=$(awk "BEGIN {printf \"%.2f\",${ELAPSED_TIME}/1000}") done
然后,我正在写一些关于每个批处理的信息(如时间等)到我正在生成的html页面中的表格。
当runBatch正在运行时 ,我将如何logging最高的内存/ CPU使用情况,以及时间等?
任何帮助赞赏。
编辑:我设法做到这一点。 我在后台运行这个脚本的脚本中添加了一个包装脚本。 我把它的PID传给$! 到包装脚本中的另一个脚本,每秒监视进程CPU和内存使用情况。 当PID不再活跃时,我将所有内容编译成一个html页面。 欢呼的指针。
你应该能够使用$!获得进程的PID,
runBatch $batchFile & myPID=$!
然后你可以运行一个top -b -p $myPID来打印出CPU的滴答概要。
记忆:
cat /proc/meminfo
接下来grep任何你想要的,
Cpu,它比较复杂 – / proc / stat扩展
平均负载:
cat /proc/loadavg
对于时间“runBatch”使用
time runBatch
喜欢
time sleep 10
一旦你得到了你的进程的PID(例如像这里回答的那样),你可以使用proc(5)文件系统(例如watch(1) & cat(1)或者grep(1) )
watch cat /proc/$myPID/stat
(或使用/proc/$myPID/status或/proc/$myPID/statm ,或者/proc/$myPID/maps作为地址空间等)
顺便说一句,要运行批处理作业,你应该考虑批处理 (你可以看看crontab(5)定期运行的东西)