日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记crontab脚本未执行问题排查

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记crontab脚本未执行问题排查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

昨晚某個用python寫的監控腳本上線,運維小伙伴電話告知手動執行結果正常,但用crontab無論如何也調不起來,腳本自己打的log也杳無音訊。

檢查

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

    思路

  • 上面這是什么鬼,本地log echo到絕對路徑,而且路徑居然還沒改?
    • 告知小伙伴先別忙著改腳本,關注一下那個old/srcipt.log。然后得知log沒有輸出。
  • Cron在執行腳本的時候,會把輸出通過郵件發送給crontab的所有者,或者MAILTO環境變量指定的郵箱。但是此處居然很自信地將 stdout, stderr 都重定向到了/dev/null,郵件自然空空如也。
    • 修改重定向到/tmp/script.log,觀察到輸出:
    File "script.py", line 50finally:^ SyntaxError: invalid syntax
  • 這又是哪跟哪?翻出來瞧瞧:
    try: f = open('file', 'r') except IOError, e: print >> sys.stderr, e else: somelist = f.readlines() finally: f.close()
    對著這段代碼看了足足5分鐘……
    有毛病嗎?沒毛病啊?是我眼睛有毛病了?

  • 既然是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
  • 記得服務器是RHEL 5.8,元配python 2.4.3,那么就是crontab默默地調用了/usr/bin/python

  • 把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脚本未执行问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。