问题描述

昨晚某个用python写的监控脚本上线,运维小伙伴电话告知手动执行结果正常,但用crontab无论如何也调不起来,脚本自己打的log也杳无音讯。

检查

  1. 首先就要看看crontab是怎么写的:
*/5 * * * * source /etc/profile; python /path/to/the/script.py >> /dev/null 2>&1
  1. 然后看看脚本是怎么写的(此处省略几百行,关注点如下):
logging.warning('some error message sending to syslog server')
os.system('echo "other local log" >> /path/to/**old**/script.log')

思路

  1. 上面这是什么鬼,本地log echo到绝对路径,而且路径居然还没改?

    • 告知小伙伴先别忙着改脚本,关注一下那个old/srcipt.log。然后得知log没有输出。
  2. Cron在执行脚本的时候,会把输出通过邮件发送给crontab的所有者,或者MAILTO环境变量指定的邮箱。但是此处居然很自信地将 stdout, stderr 都重定向到了/dev/null,邮件自然空空如也。
    • 修改重定向到/tmp/script.log,观察到输出:
      File "script.py", line 50finally:^
    SyntaxError: invalid syntax
  3. 这又是哪跟哪?翻出来瞧瞧:
    try: f = open('file', 'r') except IOError, e: print >> sys.stderr, e else: somelist = f.readlines() finally: f.close()
    对着这段代码看了足足5分钟……
    有毛病吗?没毛病啊?是我眼睛有毛病了?

  4. 既然是finally这有语法错误,那就滚回去翻翻文档吧。还好我有服务器上Python 2.5对应的老文档。

    Changed in version 2.5: In previous versions of Python, try...except...finally did not work. try...except had to be nested in try...finally.

    Python 2.5 开始支持except跟finally同级,之前版本except要嵌套在try...finally里面。如此说来,难道是版本问题?

    # python --version
    python 2.5.x
    # which python
    /usr/local/bin/python
  5. 记得服务器是RHEL 5.8,元配python 2.4.3,那么就是crontab默默地调用了/usr/bin/python

  6. 把crontab改成:
*/5 * * * * source /etc/profile; /usr/local/bin/python /path/to/the/script.py >> /dev/null 2>&1
脚本调起来了。

问题解决了,但还是没想明白 source /etc/profile 后为何会去用python2.4,待查。

转载于:https://www.cnblogs.com/qingheng/p/cron-not-execute.html

记crontab脚本未执行问题排查相关推荐

  1. centos7 crontab未执行问题排查

    问题:设置了定时任务,发现任务未执行 [root@master ~]# crontab -l 18 11 * * * echo aaa > /tmp/test 2>&1 59 5 ...

  2. C#执行osql脚本时部分脚本未执行

    1.使用C#调用OSql执行sql脚本时发现有脚本中某些sql语句没有执行. 2.脚本中有很多go语句.这些go语句会导致部分脚本无法执行. 3.但是脚本中也会发生缺少go语句导致的错误,当后面的sq ...

  3. CentOS crontab定时任务不执行的解决

    crontab 配置文件 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # .- minute (0 59 ...

  4. linux使用flock文件锁解决脚本周期内未执行完重复执行

    linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...

  5. 运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)

    运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell ...

  6. 对未标记为可安全执行的脚本_三、??XSS跨站脚本攻击

    跨站脚本攻击(Cross Site Scripting),缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意 ...

  7. 运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1676490 运维 ...

  8. 对未标记为可安全执行的脚本_Script Debugger for Mac(脚本调试软件)

    你是否需要一款可以轻松编译AppleScript的工具吗?来试试Script Debugger for Mac吧!Script Debugger Mac版是一款运行在mac平台的调试软件.Script ...

  9. linux怎么查看定时任务有没有运行,怎么看crontab定时任务是否执行

    定时执行操作命令,每一个用户拥有自己的crontab,那么大家知道怎么看crontab定时任务是否执行呢?接下来大家跟着学习啦小编一起来了解一下的看crontab定时任务是否执行解决方法吧. 看cro ...

最新文章

  1. JQUERY获取text,areatext,radio,checkbox,select值
  2. Dataset之MNIST:自定义函数mnist.load_mnist根据网址下载mnist数据集(四个ubyte.gz格式数据集文件)
  3. Redis入门(暂不更新)
  4. 牛客 - Gaming with Mia(dp)
  5. 力扣-复制带随机指针的链表
  6. devops 分支管理策略_DevOps招聘策略以吸引顶尖人才
  7. python scapy模块安装_python scapy模块安装与依赖模块
  8. vue项目实践教程1:vux项目搭建和简介
  9. pandasql库学习使用之在Python中执行SQL语句
  10. 智能电网调度技术支持系统建设方案
  11. 欧洲语言框架A1到C2,法语等级 A1、A2、B1、B2、C1、C2
  12. Oracle项目管理系统之合同基本信息
  13. 【智能安防监控补光灯调光芯片方案】单节锂电降压恒流驱动芯片FP8013 最大输出3A体积小/静态功耗低/效率高/支持无频闪调光
  14. Proxmox VE 配置 朵拉云 桌面虚拟化
  15. 异常,Map,File
  16. gds是什么系统简称_气体检测仪GDS系统是什么系统?
  17. JAVA中 BufferedImage、ImageIO用法
  18. 哪里有纯免费的PPT模板下载网站?
  19. 众所周知的广告屏蔽神器uBlock/Adguard,为啥你装上后和没装一样?
  20. 怎么下载网页上的视频m3u4

热门文章

  1. 手把手实现腾讯qq拖拽删去效果(二)
  2. 小型车、中型车、大型车、重型车的区分和定义见下表:
  3. TextSwitcher--文本切换器
  4. 2009年3月28日四级网络工程师 试卷答案、点评及讨论
  5. rhel6.2安装oracle11g,RHEL 6.2 x86_64 下安装Oracle 11g步骤
  6. Nacos源码集群数据同步
  7. 多线程对于共享变量访问带来的安全性问题
  8. 手写自己的MyBatis框架-1.0 的不足
  9. SpringMVC的请求-获得请求参数-自定义类型转换器
  10. 测试发送消息和接受消息