微信号:gh_1cb598337696

介绍:Qtest,是360公司唯一的服务端测试团队.我们的理念是做一个会编程的测试工程师,做一个不断思考,全力保证产品质量的测试工程师.

定时任务初体验

2018-11-28 19:12 羽萝

点击蓝字关注这个神奇的公众号~

最近需要在服务器上配置一个定时任务,所以想着先在本地Mac环境上run起来。此处用的是cron定时任务,过程中也遇到了一些小问题,故特此记录梳理。

cron初印象

简而言之,cron是一个自定义定时器。常见于Unix和类Unix的操作系统中,用于设置周期性被执行的命令。Linux和Mac环境下对于cron的操作基本一致。cron一词源于希腊语time的前缀chron。

入门导向

  • cron和crontab

    cron是一个定时执行任务的守护进程。

    crontab是cron的配置文件或cron任务的列表。

    守护进程cron连续运行,每分钟检查一次配置文件中的修改,根据配置周期执行命令。并且它能够获取每个任务的输出(如果有输出的话),并将结果通过电子邮件发送给定时任务的所有者。

    更为详细的内容大家可以通过man cron指令查阅系统文档。

  • 查看cron是否启动

    sudo launchctl list | grep cron

    MACOSX是基于UNIX核心的系统,cron是系统自启动的守护进程。所以一般终端输入如上命令并填写密码后,会展示如下。



第一列数字,表示进程的pid,如果是正在运行的进程,显示数字,如果没在运行,显示“-”;第二列数字表示进程的退出代码,如果已经完成并退出,显示“0”,如果是负数,表示结束进程的信号量;第三列则表示是该进程的名称标识。

  • 添加定时任务。

    crontab –e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。【注意,cron的一系列操作是区分用户的哦】

    crontab –l 显示某个用户的crontab文件内容。同样不指定用户时,显示当前用户的crontab文件。

    crontab –r 删除某个用户的crontab文件。

    我们通过crontab –e编辑保存自己的定时任务,譬如下图,为我之前的一个定时任务。



编辑完毕保存退出后展示crontab:installing new crontab即表示定时任务添加成功。

cron添加定时任务的格式为:



/ 常用来与范围组合指定相隔时间,例如

*/10 * * * * command 即表示每隔10分钟执行一次指令。


简单而言,定时任务的配置就到此结束了。接下来给大家分享下在配置过程中遇到的一些小坑。


1)脚本执行要成功,环境变量先保证。

定时任务执行完毕,都会将任务输出信息通过电子邮件的形式发送给当前用户,默认路径:/var/mail/[user_name]。刚开始我收到的邮件如下:



奇怪……明明本地运行python脚本没问题,adb的环境也都搭建成功可用,偏偏设置了定时任务后执行报错。经查,cron会在用户登录时的home目录中提取用户的默认环境变量加上默认的shell(/usr/bin/sh),如果用户默认没shell,则不加。因此cron所知道的环境变量相当有限,所以在使用时首先要保证文件中提供必要的路径(多用绝对路径)和环境变量。如下图,提示我找不到adb和python3时,导入环境变量,并添加python3的绝对路径后,问题迎刃而解了。



2)linux系统平台下,cron服务可以正常重启,开/闭。但是在修改crontab文件后试图通过 sudo /usr/sbin/cron restart重启服务,却一直提示cron already running。

其实原因我们之前已经提到过,cron是系统自启动的守护进程。即便关掉后还是会自启动运行。


3)还有一点要注意的是,每个定时任务执行完毕后,系统都会给当前用户发送邮件。如果是一个长期配置的定时任务,日积月累,可能会生成一个特别大的日志文件。

因此,我们可以先将需要的信息重定向输出到指定路径的文件中,然后在每个定时任务后面进行重定向处理:>/dev/null 2>&1,如此一来,标准输出和错误输出都会输出到“黑洞”。“黑洞”学说法,如果有不了解的同学,一查便知哦。

以上,便是近期在Mac环境下配置定时任务的初接触,简单梳理。有问题的地方,还请大家多多指教。


Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!


陪伴是最长情的告白

每日为你推送最in的测试技术

识别二维码

关注我们


 
Qtest之道 更多文章 Chisel-xcode 下的调试神器 图像识别在测试中的应用 你的SDK够稳定吗 测试兵器谱の浅谈框架 Appium+IOS+Java真机自动化环境搭建
猜您喜欢 58 同城 iOS 客户端 Hybrid 框架探索 使用 Draft 开发基于数据渲染的企业级编辑器 仿百度贴吧整块div的hover效果 今天开始学内核:第一天 聚焦爬虫原理及其在互联网金融领域应用前景浅析