免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11480 | 回复: 7

[系统管理] 在crontab中设置的定时任务必须加上重定向2>&1才能运行成功,为什么? [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
发表于 2014-12-30 15:19 |显示全部楼层
本帖最后由 plumdavid 于 2014-12-30 17:50 编辑

在使用crontab设置定时任务时,发现一个奇怪的现象,有个定时任务必须加上错误输出重定向命令才能正常运行,否则不成功。
具体情况见以下说明:

在centos中crontab设置的定时任务代码如下:

  1. 0,30 * * * * sh /home/sysuser/shell/subsh/uns/main.sh    #uns test
  2. 5,20,35,50 * * * * /usr/bin/php /home/sysuser/shell/subsh/uns/main.php    #uns test
  3. 10 1 * * * /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_day.php
  4. 10 1 * * 1 /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_week.php
  5. 10 2 1 * * /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_month.php
复制代码
查看结果:
第1、2行运行成功;
第3行运行失败;
第4、5行因无数据未测试。
查看log日志,crond服务提示第3行已运行:
  1. Dec 30 01:10:01 localhost CROND[1002]: (sysuser) CMD (/usr/bin/php /home/sysuser/shell/subsh/uns/analyze_day.php)
复制代码
将第3行加上错误输出重定向,运行成功,代码如下:
  1. 10 1 * * * /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_day.php  > /home/sysuser/tmp/crontab/log_day.txt 2>&1
复制代码
若将重定向的错误输出参数2>&1去掉,则运行失败,代码如下:
  1. 10 1 * * * /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_day.php  > /home/sysuser/tmp/crontab/log_day.txt
复制代码
在shell下直接运行第3行,不需要加上重定向,也能成功,代码如下(-bash-4.1$ 是提示符):
  1. -bash-4.1$ /usr/bin/php /home/sysuser/shell/subsh/uns/analyze_day.php
复制代码
上面运行的是定时采集数据服务器,共部署9台,同样的运行环境,其它8台服务器,第3行代码都没有加错误重定向命令,运行成功,只有此台服务器出现此现象。因出问题的服务器部署的比其它服务器早,我估计系统管理员在部署时不经意做了改动,而他自己并不知道,所以想向大虾给予指导。

附:log_day.txt 部分内容:
  1. PHP Notice:  Undefined index: 1401 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 461
  2. PHP Notice:  Undefined index: 1401 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 475
  3. PHP Notice:  Undefined index: 1401 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 489
  4. PHP Warning:  Division by zero in /home/sysuser/shell/subsh/uns/analyze_day.php on line 510
  5. PHP Notice:  Undefined index: 1401 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  6. PHP Notice:  Undefined index: 1402 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 503
  7. PHP Notice:  Undefined index: 1402 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  8. PHP Notice:  Undefined index: 1442 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 503
  9. PHP Notice:  Undefined index: 1442 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  10. PHP Notice:  Undefined index: 1443 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 503
  11. PHP Notice:  Undefined index: 1443 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  12. PHP Notice:  Undefined index: 1444 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 461
  13. PHP Notice:  Undefined index: 1444 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 475
  14. PHP Notice:  Undefined index: 1444 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 489
  15. PHP Warning:  Division by zero in /home/sysuser/shell/subsh/uns/analyze_day.php on line 510
  16. PHP Notice:  Undefined index: 1444 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  17. PHP Notice:  Undefined index: 1445 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 461
  18. PHP Notice:  Undefined index: 1445 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 475
  19. PHP Notice:  Undefined index: 1445 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 489
  20. PHP Warning:  Division by zero in /home/sysuser/shell/subsh/uns/analyze_day.php on line 510
  21. PHP Notice:  Undefined index: 1445 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
  22. PHP Notice:  Undefined index: 1446 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 461
  23. PHP Notice:  Undefined index: 1446 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 475
  24. PHP Notice:  Undefined index: 1446 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 489
  25. PHP Warning:  Division by zero in /home/sysuser/shell/subsh/uns/analyze_day.php on line 510
  26. PHP Notice:  Undefined index: 1446 in /home/sysuser/shell/subsh/uns/analyze_day.php on line 517
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
发表于 2014-12-30 17:47 |显示全部楼层
为什么我的贴子在论坛里找不到。

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
发表于 2014-12-30 18:11 |显示全部楼层
怎么可能加重定向才能成功?那是输出重定向,是对于结果的重定向,怎么会影响程序执行呢?想知道楼主的执行成功和失败各是什么样子的输出

论坛徽章:
0
发表于 2014-12-30 20:36 |显示全部楼层
3楼的说错了,1楼的说的对,那个就是错误输出重定向

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
发表于 2014-12-30 22:28 |显示全部楼层
回复 3# su8610


    不可思议的事情就这样发生了。
程序运行成功的标志,是数据库会添加记录。没有运行或运行失败,数据库里就不会有记录。
在crontab里设置定时任务,没有重定向或重定向没有添加2>&1,数据库里都不会有记录,只有定时任务错误重定向,数据库里才有记录,这说明:定时任务只有错误重定向才会运行

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
发表于 2014-12-30 22:36 |显示全部楼层
回复 3# su8610


    有人遇到和我类似的情况,因发不了URL链接,你在百度知道里搜“linux定时任务重定向到日志才能完整且正确执行”即可查到。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
发表于 2014-12-30 22:36 |显示全部楼层
回复 4# linuxzkq


    多谢关注,希望能有高手给我讲解。

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
发表于 2015-01-05 17:03 |显示全部楼层
回复 5# plumdavid


    我不认同你这个观点,但是我也说不出什么,因为很明显的你第一第二行都没有加重定向,为什么就可以了 ???
所以我建议你看看你cron的环境
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP