免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2154 | 回复: 7
打印 上一主题 下一主题

[其他] suse下设置的时钟任务没实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-12 13:32 |只看该作者 |倒序浏览
我在suse系统下,往etc/crontab中添加任务
  1. echo "*/5 * * * * root  $Cur_Dir/bmcsensor.sh" >>/etc/crontab
复制代码
,让每间隔5分钟去执行一次bmcsensor.sh。
在系统下我看每隔5分钟ps -ef |grep bmcsensor可以看到有bmcsensor.sh在执行;但用crontab -l 去查看总是提示root没有任务;而且我用sh -x bmcsensor.sh 调试得到的结果,可调用时钟执行的bmcsensor.sh 结果不一致。
整体脚本如下,我直接执行sh bmcsensor.sh 则times变量值是记录到record中,但是让时钟自己调用则record中没有记录times变量值
  1. #!/bin/sh
  2. Cur_Dir=`pwd`
  3. declare system_suse=`less /etc/issue |grep SUSE |wc -l`
  4. declare system_redhat=`less /etc/issue |grep Red |wc -l`
  5. /etc/init.d/ipmi restart
  6. function filecmp()
  7. {
  8. cd $Cur_Dir/Bmcsensor
  9. cmp -s $1 $2
  10. echo $?
  11. }
  12. if [ ! -d $Cur_Dir/Bmcsensor ];then
  13.      times=1
  14.      mkdir -p $Cur_Dir/Bmcsensor
  15.      ipmitool -I open sdr|awk -F '|' '{print $3}' >$Cur_Dir/Bmcsensor/sdr
  16.      ipmitool -I open sensor >$Cur_Dir/Bmcsensor/sensor
  17.      echo $times>$Cur_Dir/Bmcsensor/record
  18.      echo "*/5 * * * * root  $Cur_Dir/bmcsensor.sh" >>/etc/crontab
  19.      if [ "$system_suse" == "1" ];then
  20.          /etc/rc.d/cron restart
  21.      elif [ "$system_redhat" == "1" ];then
  22.          service crond restart
  23.      fi
  24. else
  25.      
  26.      if [ "$system_suse" == "1" ];then

  27.          /etc/rc.d/cron restart

  28.      elif [ "$system_redhat" == "1" ];then
  29.       
  30.          service crond restart
  31.      fi
  32.      if [ ! -d $Cur_Dir/Bmcsensor/Sensor_History ];then
  33.      mkdir -p $Cur_Dir/Bmcsensor/Sensor_History
  34.      fi
  35.      stress_flag=`ps -ef |grep xhpl |wc -l`
  36.     if [ "$stress_flag" == "1" ];then
  37.        i=1
  38.        until [ $i -eq 6 ]
  39.        do
  40.          i=`expr $i + 1`
  41.          sleep 10s
  42.        done
  43.     else
  44.        mv $Cur_Dir/Bmcsensor/sdr $Cur_Dir/Bmcsensor/sdrbak
  45.        mv $Cur_Dir/Bmcsensor/sensor  $Cur_Dir/Bmcsensor/sensorbak
  46.        ipmitool -I open sdr|awk -F '|' '{print $3}' >$Cur_Dir/Bmcsensor/sdr
  47.        ipmitool -I open sensor >$Cur_Dir/Bmcsensor/sensor
  48.    
  49.     #   lasttime=`cat $Cur_Dir/Bmcsensor/record |awk 'END{print $1}'`
  50.       lasttime=`tac $Cur_Dir/Bmcsensor/record|sed -n 1p`
  51.        times=`expr $lasttime + 1`
  52.        echo $times

  53.        echo $times >>$Cur_Dir/Bmcsensor/record
  54.        cd $Cur_Dir/Bmcsensor
  55.        compare_flag=$(filecmp sdrbak sdr)
  56.        if [ "$compare_flag" == "0" ];then
  57.            cat $Cur_Dir/Bmcsensor/sensorbak |awk '{print $0}' >>$Cur_Dir/Bmcsensor/Sensor_History/sensorbak
  58.            echo -ne "\n" >>$Cur_Dir/Bmcsensor/Sensor_History/sensorbak
  59.            echo -ne "Pass\n" >$Cur_Dir/Bmcsensor/result
  60.            rm -f $Cur_Dir/Bmcsensor/sdrbak
  61.            rm -f $Cur_Dir/Bmcsensor/sensorbak
  62.        elif [ "$compare_flag" == "1" ];then
  63.          
  64.            if [ "$system_suse" == "1" ];then
  65.                /etc/rc.d/cron stop
  66.            elif [ "$system_redhat" == "1" ];then
  67.                service crond stop
  68.            fi
  69.            echo -ne "Failed \n">$Cur_Dir/Bmcsensor/result
  70.                
  71.            diff -B $Cur_Dir/Bmcsensor/sdrbak $Cur_Dir/Bmcsensor/sdr | grep "^[0-9]" |sed 's/[a-z].*$//g' >$Cur_Dir/Bmcsensor/diffnum
  72.            for i in `cat $Cur_Dir/Bmcsensor/diffnum`
  73.            do
  74.               cat $Cur_Dir/Bmcsensor/sensorbak |sed -n $ip >>$Cur_Dir/Bmcsensor/result
  75.            done
  76.            echo -ne "\n">>$Cur_Dir/Bmcsensor/result
  77.            for i in `cat $Cur_Dir/Bmcsensor/diffnum`
  78.            do
  79.               cat $Cur_Dir/Bmcsensor/sensor|sed -n $ip >>$Cur_Dir/Bmcsensor/result
  80.           done
  81.       else
  82.            echo -ne "wrong\n" >$Cur_Dir/Bmcsensor/result

  83.       fi

  84.    fi
  85. fi
复制代码

论坛徽章:
6
摩羯座
日期:2013-12-27 09:45:04技术图书徽章
日期:2014-01-27 12:40:06辰龙
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
2 [报告]
发表于 2014-02-12 13:42 |只看该作者
回复 1# 刘彩霞


    看下$HOME下有没有

论坛徽章:
0
3 [报告]
发表于 2014-02-12 13:47 |只看该作者
回复 2# laliheyi
是在$HOME下呢,可是我所有的写的时候都是写的绝对路径,为啥还是到了$HOME下呢


   

论坛徽章:
0
4 [报告]
发表于 2014-02-12 13:54 |只看该作者
laliheyi 发表于 2014-02-12 13:42
回复 1# 刘彩霞


明白为啥是root了,每次调用crontab之后当前目录变成了/root,可是我想让当前路径始终是我这个脚本所在的路径,如何实现呢?

论坛徽章:
6
摩羯座
日期:2013-12-27 09:45:04技术图书徽章
日期:2014-01-27 12:40:06辰龙
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
5 [报告]
发表于 2014-02-12 14:00 |只看该作者
回复 4# 刘彩霞
  1. Cur_Dir=`pwd`
复制代码
改成
  1. Cur_Dir=`dirname $0`
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-02-17 10:34 |只看该作者
看别人是这么写的
  1. Cur_Dir=$(cd "$(dirname "$0")";pwd)
复制代码
,得到的是想要的结果,但是没完全理清楚这个层次,有人能解释下吗?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
7 [报告]
发表于 2014-02-17 10:48 |只看该作者
回复 6# 刘彩霞


    先执行 dirname "$0",在执行 cd 和 pwd

论坛徽章:
0
8 [报告]
发表于 2014-02-17 11:04 |只看该作者
回复 6# 刘彩霞
crontab应该是在/var/spool/cron下的username命名的文件中./var/spool/cron/root
所以你crontab -l看不到
然后crontab中调的脚本是从用户home目录发起的所以你进去pwd就是/root
crontab中配置脚本路径是 $curdir/test.sh
dirname $curdir/test.sh不就得到$curdir了么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP