今天做巡检的时候发现crontab
不执行了,我是这么写的: 0 09,15 * * * sh /beaprj/dailyreport/dailyreport.sh >/beaprj/dailyreport/`hostname`.log 08 11,16 * * * sh /beaprj/dailyreport/log/backupchecklog.sh
在网上查了查说可能是路径的问题,然后我把backupchecklog.sh
脚本里面的路径全部改成了绝对路径,mail
命令查看报错为:cp: cannot stat `/beaprj/dailyreport/log/-.log': No such file or directory
,应该还是路径的问题把前面的路径去掉报错为: Try `cp --help' for more information.
看来他是把那个变量认成是“-
”了,奇怪,继续研究吧 WORKPATH=/beaprj/dailyreport/log/
BACKPATH=/beaprj/dailyreport/log/log/
ls -l *.log|awk '{print $7"-"$8}'|awk -F: '{if($1 <= 12) {print"AM-" $2} else {print "PM-" $2}}'>${WORKPATH}list
for i in `cat ${WORKPATH}list`
FILENAME=`echo $i|awk -F- '{print $3"-"$4}'|awk -F. '{print $1}'`
APM=`echo $i|awk -F- '{print $1}'`
cp ${WORKPATH}${FILENAME}".log" ${BACKPATH}${FILENAME}"_"${DATE}"_"${APM}.log
经过反复测试发现ls -l *.log|awk '{print $7"-"$8}'|awk -F: '{if($1 <= 12) {print"AM-" $2} else {print "PM-" $2}}'>${WORKPATH}list
在这里倒进来的list
文件里面的东西不符合,和预期的不一样,继续研究吧 后来单独执行了一个脚本为(这里把路径改成了绝对路径): ls -l /beaprj/dailyreport/log/*.log | awk -F"/" '{print $1"-"$5}'>/beaprj/dailyreport/log/list
执行结果list
里面为-rwxrwxrwx 1 root root 1314
11-18 08:57 -EMIS-APP1.log
-rwxrwxrwx 1 root root 1314
Nov 18 08:57 -EMIS-APP1.log
仔细看红色部分,这样执行完的后如果加上awk '{print $7"-"$8}
那样显示的结果就不一样了,我也没弄明白为什么crontab
与外面不一样,请高手指点,但是把上面的awk
改成awk '{print $8"-"$9}
,crontab
就会正常运行了,但是正常情况下就会有报错。 问题总结:这里应该不是绝对路径的问题,问题出在用 ll 看文件属性的时候外界显示 11-18 但是 crontab 里面执行就会显示 Nov 18 就这么简单 本文转自gaofeng36599 51CTO博客,原文链接:http://blog.51cto.com/786678398/720201