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

2019-01-16 10:57:19 +08:00
 alvin666

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

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

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


--


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

贴个图:



gouchaoer
2019-01-16 13:17:40 +08:00
我喜欢用 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
2019-01-16 13:18:49 +08:00
Python 写 log 文件会修改文件 mtime,去检查 mtime,或者解析 log 的时间啥的都行,这个很简单的
gouchaoer
2019-01-16 13:26:07 +08:00
还要看状态简单
echo 退出码到文件
`
好了,去检查 a 吧
zmj1316
2019-01-16 14:01:38 +08:00
都用 php 了,干脆上 jenkins 跑算了?
lithiumii
2019-01-16 14:04:44 +08:00
我是这样:python 脚本里面出错会扔到 server 酱微信推送提醒,不出错默认它就是好的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527496

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX