cron 定时运行 Python 小脚本,怎么检测运行状态? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alvin666
V2EX    问与答

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

  •  
  •   alvin666 2019 年 1 月 16 日 via Android 2830 次点击
    这是一个创建于 2566 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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


    --


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

    贴个图:



    gouchaoer
        16
    gouchaoer  
       2019 年 1 月 16 日 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 年 1 月 16 日 via Android   1
    Python 写 log 文件会修改文件 mtime,去检查 mtime,或者解析 log 的时间啥的都行,这个很简单的
    gouchaoer
        18
    gouchaoer  
       2019 年 1 月 16 日 via Android   1
    还要看状态简单
    echo 退出码到文件
    `
    好了,去检查 a 吧
    zmj1316
        19
    zmj1316  
       2019 年 1 月 16 日
    都用 php 了,干脆上 jenkins 跑算了?
    lithiumii
        20
    lithiumii  
       2019 年 1 月 16 日   1
    我是这样:python 脚本里面出错会扔到 server 酱微信推送提醒,不出错默认它就是好的
    a663
        21
    a663  
       2019 年 1 月 16 日 via Android
    $?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     999 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 18:32 PVG 02:32 LAX 10:32 JFK 13:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86