问题描述

昨晚某个用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. TP框架中field查询字段
  2. jquery 读秒,倒数计时方案
  3. C# DateTimePicker控件如何精确设置显示时分秒
  4. [HDOJ3998] Sequence(DP,最大流)
  5. 【HDU - 1540】 Tunnel Warfare (线段树进阶操作 区间合并+ 单点更新+ 最长覆盖区间查询 )
  6. 数据结构:排序算法之交换排序(冒泡排序、快速排序)
  7. 在淘宝,我们是这样衡量代码质量的
  8. 【OpenCV 例程200篇】25. 图像的平移
  9. 让我的网站变成响应式的3个简单步骤
  10. 免费作图软件draw.io 软件输入数学公式和文本
  11. 华三服务器升级文档,H3C交换机升级步骤
  12. word怎么只删除英语保留汉语或删除汉语保留英文
  13. 压力测试工具Apache Bench:2:基于Alpine的Apache Bench镜像
  14. 生成树协议STP 网络冗余技术
  15. 计算机网络中数据包的分布,计算机网络习题
  16. 成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题
  17. 解决关于win10下eclipse代码格式化不生效问题
  18. 华为(HUAWEI)TE10一体化高清视频会议终端系统维护之指示灯状态
  19. DPLL 算法(求解k-SAT问题)详解(C++实现)
  20. 请回答2020 | 智行中国,用脚步记录这个时代的智变故事

热门文章

  1. 【转】增强 scite 编辑器的代码提示功能
  2. 转Oracle Data Guard 理论知识3-自动裂缝检测和解决
  3. [翻译]延迟着色(1)
  4. [PowerShell] PowerShell学习脚印
  5. 20080904--判断表单中的元素值是否改变了
  6. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
  7. 签约 计算机英语,签约协议时的英文表达
  8. 关联查询的延迟加载是怎么实现的?
  9. MyBatis设计模式总结
  10. Redis中的过期策略