- 论坛徽章:
- 0
|
本帖最后由 Samdy_Chan 于 2014-06-17 12:03 编辑
各位好:
我写了一个sh脚本,统计目前用户的进程数和打开的文件数,单独手工 ./check_ora_backup_limits.sh 方式执行脚本,可以正常统计到数据,但放在crontab 中定时执行,则统计不到数据,统计的值均为0。
脚本内容如下:
[root@SGS-ORA-04 scripts]# cat check_ora_backup_limits.sh
#!/bin/bash
### Author: Chen Hongquan
### Company: Rainbow Tech.
echo "[`date '+%F %T'`]: 开始执行脚本..." >> ${0}.out
v_grid_Snproc=`grep -v "^#" /etc/security/limits.conf | grep -i "grid.*soft.*nproc" | awk '{print $4}'`
v_grid_Snofile=`grep -v "^#" /etc/security/limits.conf | grep -i "grid.*soft.*nofile" | awk '{print $4}'`
v_oracle_Snproc=`grep -v "^#" /etc/security/limits.conf | grep -i "oracle.*soft.*nproc" | awk '{print $4}'`
v_oracle_Snofile=`grep -v "^#" /etc/security/limits.conf | grep -i "oracle.*soft.*nofile" | awk '{print $4}'`
v_grid_ps=`ps -lf -u grid | grep -v UID | wc -l`
v_grid_files=`lsof | awk '{if($3 == "grid") print $0}' | wc -l`
v_oracle_ps=`ps -lf -u oracle | grep -v UID | wc -l`
v_oracle_files=`lsof | awk '{if($3 == "oracle") print $0}' | wc -l`
#sleep 120 ##加上这个,在crontab中定时执行此脚本,也统计不了数值,不加这个sleep,脚本执行时间不到一秒就执行完了,手工执行此脚本需要几秒钟。
echo "v_grid_ps=${v_grid_ps}" >> ${0}.out
echo "v_oracle_files=${v_oracle_files}" >> ${0}.out
if [ $v_grid_ps -ge $v_grid_Snproc ];then
echo "[`date '+%F %T'`]: grid用户现在的进程数是:${v_grid_ps},设置值是 ${v_grid_Snproc}." >> ${0}.out
fi
if [ $v_grid_files -ge $v_grid_Snofile ];then
echo "[`date '+%F %T'`]: grid用户现在的打开文件数是:${v_grid_files},设置值是 ${v_grid_Snofile}." >> ${0}.out
fi
if [ $v_oracle_ps -ge $v_oracle_Snproc ];then
echo "[`date '+%F %T'`]: oracle用户现在的进程数是:${v_oracle_ps},设置值是 ${v_oracle_Snproc}." >> ${0}.out
fi
if [ $v_oracle_files -ge $v_oracle_Snofile ];then
echo "[`date '+%F %T'`]: oracle用户现在的打开文件数是:${v_oracle_files},设置值是 ${v_oracle_Snofile}." >> ${0}.out
fi
echo "[`date '+%F %T'`]: 脚本执行完成." >> ${0}.out
--------------------------------
crontab 配置如下:
*/2 5-11 * * * /opt/rainbow/scripts/check_ora_backup_limits.sh &
----
.out脚本执行输出日志如下:
[2014-06-17 11:39:02]: 开始执行脚本...
v_grid_ps=60
v_oracle_files=78607
----以上为手动执行脚本的输出
---以下是crontab自动执行输出,v_oracle_files统计不到数据:
[2014-06-17 11:39:10]: 脚本执行完成.
[2014-06-17 11:40:02]: 开始执行脚本...
v_grid_ps=60
v_oracle_files=0
[2014-06-17 11:42:02]: 脚本执行完成.
---------------
请问这是什么原因?觉得shell脚本中,觉得如果执行比较久的命令,在crontab中自动执行时,不会等待命令执行完,直接向下执行的,加了sleep xxxx睡眠命令也不行,但单独手工执行就可以,请问这是什么原因,应怎么处理?谢谢! |
|