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

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

  •  
  •   alvin666 · 37 天前用 Android 发布 · 1028 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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


    --


    点进去可以查看对应任务这次运行的 log
        15
    z0ne   37 天前   ♥ 1
    我是这么做的:
    cron 的命令,最后都加上>>logs.txt ,写入日志文件,然后就去读取这个文件&清空,达到判断是否执行的目的。

    贴个图:



        16
    gouchaoer   37 天前 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 差的,写的飞快
        17
    gouchaoer   37 天前 via Android   ♥ 1
    Python 写 log 文件会修改文件 mtime,去检查 mtime,或者解析 log 的时间啥的都行,这个很简单的
        18
    gouchaoer   37 天前 via Android   ♥ 1
    还要看状态简单
    echo 退出码到文件
    `
    好了,去检查 a 吧
        19
    zmj1316   37 天前
    都用 php 了,干脆上 jenkins 跑算了?
        20
    lithiumii   37 天前   ♥ 1
    我是这样:python 脚本里面出错会扔到 server 酱微信推送提醒,不出错默认它就是好的
        21
    a663   37 天前 via Android
    $?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   774 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 21:05 · PVG 05:05 · LAX 13:05 · JFK 16:05
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1