liunx常用

一文精通 crontab从入门到出坑

2017-01-15  本文已影响0人  波罗学的草稿

简书不维护了,欢迎关注我的知乎:波罗学的个人主页

原文地址

此篇技术博文主要介绍的是crontab,Linux下的计划任务管理工具。涉及内容包括crontab使用配置、常见坑的分析和编者总结的错误调试方法。

我的理解,后台任务通常分为两种:常驻和定时。之前的文章《pm2进程管理工具使用总结》主要针对的是常驻任务。今天来谈谈crontab,主要针对的是定时任务。

实验环境:centos7

介绍crontab

crontab的服务进程名为crond,英文意为周期任务。顾名思义,crontab在Linux主要用于周期定时任务管理。通常安装操作系统后,默认已启动crond服务。crontab可理解为cron_table,表示cron的任务列表。类似crontab的工具还有at和anacrontab,但具体使用场景不同,可参见附录《让你学会Linux计划任务》一文了解更多。

关于crontab的用途很多,如

当然,更多使用场景是要以视具体情况而定了。毕竟是工具通常都是常用规则总结而成的产物。

确认crond服务已经安装与开启之后,下面开始具体说明

简单示例

先来个简单示例体验一下。

简单示例演示成功。下面从细节深入说明crontab使用。

使用选项

上面的实验中使用了crontab命令的-e选项。我们来看看crontab命令中有哪些选项?

crontab命令的选项中,主要使用的就是以上几个,理解比较简单。

任务配置

说完了crontab的命令选项,下面开始真正的大戏,任务列表文件如何配置?

首先,看下crontab任务列表配置格式,示例文件如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 更多细节 man 4 crontabs

# 计划任务定义的例子:
# .---------------- 分 (0 - 59)
# |  .------------- 时 (0 - 23)
# |  |  .---------- 日 (1 - 31)
# |  |  |  .------- 月 (1 - 12)
# |  |  |  |  .---- 星期 (0 - 7) (星期日可为0或7)
# |  |  |  |  |
# *  *  *  *  * 执行的命令
* * * * * date >> /time.txt 2>&1

从上面的示例文件可看出,crontab的任务列表主要由两部分组成:环境变量配置与定时任务配置。可能大家在工作中更多是只用到了任务配置部分。

环境变量配置部分

理解环境变量配置这部分可以帮助我们减少去踩一些不必要的坑。简单说明上面涉及的环境变量。

当我们在使用crontab时,发现某些定时任务不能顺利执行,但shell控制台执行成功,环境变量是否正确是我们需要首先关注的点之一。具体详情可以看后面关于环境变量坑的说明。

定时任务配置部分

这部分是crontab配置核心。

定时语句解析工具

通常在使用crontab添加任务时,我们会依靠自己已有知识编写定时语句。当需要测试语句是否正确时,总需要一定时间等待证明其正确性。作为一名牛逼的程序员,这种方式就太不酷了。有没有一款工具,只要我们给出语句,其就能告诉具体执行时间呢?下面介绍一款老外开发的crontab在线解析工具。

工具地址:https://crontab.guru

下面是这个工具的截图

crontab_tool.png

从上面看出,我们输入的语句解析结果为每天的04:05执行任务。下面有这样一行文字“next at 2016-12-31 04:05:00”,告诉了我们最近一次的执行时间。

<font color=red>注明:百度搜索“crontab在线解析”获得的工具有坑,某些语句解析结果错误。为避免大家受骗,这里提供具体地址:http://tool.lu/crontab/</font>

使用有坑

crontab使用中常会遇到各种坑。下面列出编者在使用中曾遇到的一些问题。

时间配置误区

此处介绍两种坑,一种是由于基本功不足导致配置错误,而另一种则是多数人对crontab配置都存在的一个理解误区。

<font color=red>请注意,前面提到的那个百度搜索出来的工具分析结果显示的确是每月第一个星期一,这是错误的。如有朋友持怀疑态度,可自行验证,如有错误,随时告知。</font>

环境变量问题

当我们刚使用crontab时,有人会告知所有命令尽量都使用绝对路径,以防错误。为什么?这就和我们下面要谈的环境变量有关了。

特殊符号%

%在crontab是特殊符号,具体含义如下:

关于这个问题的具体说明,可以参看附录中的《Crontab and %》。

关于输出重定向

当我们不做输出重定向时,如任务有大量输出,或许有些无法解释的问题。

<font color=red>程序员的感悟:在技术的世界,当我们不按常理做事,事情也不会按常理犯错。</font>

调试大招

最后的福利,编者根据自己的总结而梳理出一套快速定位crontab错误的思路。两个角度:

任务是否执行?

确认任务成功后,如问题仍未解决,继续往下看。

命令是否正确

确认命令成功与否,这里总结步骤大致如下

调试的方法到这里就说完了。但还是实践为王,需持续总结,同时也希望大家不要在同样的坑中重复犯错。

crontab写了这么长,希望能切实帮到大家。有哪位朋友看到了最后吗?表示佩服!

参考附录

让你学会Linux计划任务
Linux中的crontab与sendmail
Crontab and %
Linux重定向

上一篇下一篇

猜你喜欢

热点阅读