V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
alvin666
V2EX  ›  问与答

cron 定时运行 Python 小脚本,怎么检测运行状态?

  •  
  •   alvin666 · 2019-01-16 10:57:19 +08:00 via Android · 2450 次点击
    这是一个创建于 2168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    cron 30min 运行一次,现在想的是 Python 打日志,然后再写一个 php 来读日志,判断是否运行成功,再判断 30min 内有没有运行。但是感觉很麻烦,求个思路

    21 条回复    2019-01-16 17:12:09 +08:00
    0ZXYDDu796nVCFxq
        1
    0ZXYDDu796nVCFxq  
       2019-01-16 11:00:22 +08:00 via Android   ❤️ 1
    exit code
    alexsunxl
        2
    alexsunxl  
       2019-01-16 11:16:56 +08:00   ❤️ 2
    有一个很简单,成本很低的土办法, 找个朋友帮忙(或者开小号)建个钉钉群,然后设置一个聊天机器人
    然后 python 运行的时候往机器人发消息。
    mcone
        3
    mcone  
       2019-01-16 11:20:06 +08:00   ❤️ 1
    你这个思路不是很好嘛……
    我之前维护过若干脚本,基本逻辑就是脚本打日志->bash 脚本负责读(记得用 tail )-f->bash 脚本对外输出(邮件等)

    我觉得这个思路挺好的,你的思路也挺对,只是不明白你的 30min 是哪里来的……
    alvin666
        4
    alvin666  
    OP
       2019-01-16 11:23:51 +08:00 via Android
    @mcone 就是需求就是半个小时运行一次这个脚本,谢谢,我去尝试一下
    @alexsunxl 我意思就是想查看运行状态的时候查看,就 24 小时每半个小时发一个消息也 emmmm
    alexsunxl
        5
    alexsunxl  
       2019-01-16 11:26:05 +08:00   ❤️ 1
    @alvin666 群消息屏蔽, 然后想看的时候去瞄一下
    这个看得舒不舒服,很大程度取决于你制定的日志格式,hahahah
    alvin666
        6
    alvin666  
    OP
       2019-01-16 11:28:54 +08:00 via Android
    @alexsunxl 平时不用钉钉和 tg...微信 bot 又容易被封...邮件的话有的邮箱不看,QQ 邮箱又和微信绑定,有新消息提醒...
    谢谢,对我来说不太合适,但是是很好的思路
    想了想微信公众号也不能主动发信息,还是得做一个检测脚本,调用的时候检测是否成功运行。
    just1
        7
    just1  
       2019-01-16 11:38:02 +08:00 via Android   ❤️ 1
    @alvin666 server 酱
    alvin666
        8
    alvin666  
    OP
       2019-01-16 11:53:01 +08:00 via Android
    @just1 我知道,我想要的是我能随时查看这个服务的状态,而不是执行成功了通知我,一天 24 小时每半个小时通知我一次我也烦啊...
    0ZXYDDu796nVCFxq
        9
    0ZXYDDu796nVCFxq  
       2019-01-16 11:58:05 +08:00 via Android   ❤️ 1
    cron 对于非 0 退出状态码是会发邮件的啊,如果系统运行了 postfix
    脚本里对执行失败指定和退出码
    需要就登录服务器看系统账号的邮箱就行
    alvin666
        10
    alvin666  
    OP
       2019-01-16 12:05:48 +08:00 via Android
    @gstqc 谢谢,也是个好办法
    xujunfu
        11
    xujunfu  
       2019-01-16 12:18:54 +08:00 via Android   ❤️ 1
    supervisor,这东西可以查看运行状态,同时还有一个 web 页面,页面里有 tail -f 查看 log
    Trim21
        12
    Trim21  
       2019-01-16 12:20:23 +08:00   ❤️ 1
    我用的 airflow
    alvin666
        13
    alvin666  
    OP
       2019-01-16 12:39:23 +08:00 via Android
    @xujunfu 问题是我这个是运行一下就结束,不是那种一直运行的..
    Trim21
        14
    Trim21  
       2019-01-16 12:44:56 +08:00   ❤️ 1
    贴两张截图(


    --


    点进去可以查看对应任务这次运行的 log
    z0ne
        15
    z0ne  
       2019-01-16 12:59:39 +08:00   ❤️ 1
    我是这么做的:
    cron 的命令,最后都加上>>logs.txt ,写入日志文件,然后就去读取这个文件&清空,达到判断是否执行的目的。

    贴个图:



    gouchaoer
        16
    gouchaoer  
       2019-01-16 13:17:40 +08:00 via Android   ❤️ 1
    我喜欢用 php 写脚本处理一些运维的东西,给你几个关键点自己判断吧

    在 crontab 里面这么写:
    * * * * * bash path/to/cron.sh

    cron.sh 里面注意:
    cd `dirname $0`进入工作目录
    expoet $PATH balabala,cron 的环境变量很少
    php/py cron.php/cron.py >> cron.out 2>> cron.err ,这么做方便查看 stderr 错误输出

    在 cron.php 脚本里注意调用命令的时候这么做 exec (“ command balabala 2>&1 ”,$o,$r ),通过检查 r 和 o 来判断执行情况,因为 o 只有标准输出,所以命令里需要把 2 定向到 1

    因为脚本在 crontab 里是每分钟启动的,启动后用 github 的 cron 库在自己内部写一个 cron 就能实现代码里的定时了,如果嫌麻烦就直接在系统 crontab 里定时内部不写

    如果 cron.php 执行时间长,你禁止多个脚本同时执行,可以基于文件所+/proc/pid/cmdline 来做

    php 做内容处理不比 py 差的,写的飞快
    gouchaoer
        17
    gouchaoer  
       2019-01-16 13:18:49 +08:00 via Android   ❤️ 1
    Python 写 log 文件会修改文件 mtime,去检查 mtime,或者解析 log 的时间啥的都行,这个很简单的
    gouchaoer
        18
    gouchaoer  
       2019-01-16 13:26:07 +08:00 via Android   ❤️ 1
    还要看状态简单
    echo 退出码到文件
    `
    好了,去检查 a 吧
    zmj1316
        19
    zmj1316  
       2019-01-16 14:01:38 +08:00
    都用 php 了,干脆上 jenkins 跑算了?
    lithiumii
        20
    lithiumii  
       2019-01-16 14:04:44 +08:00   ❤️ 1
    我是这样:python 脚本里面出错会扔到 server 酱微信推送提醒,不出错默认它就是好的
    a663
        21
    a663  
       2019-01-16 17:12:09 +08:00 via Android
    $?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5645 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:37 · PVG 11:37 · LAX 19:37 · JFK 22:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.