11

Crontab - 定时任务必备招式

 3 years ago
source link: http://www.swiftcafe.io/post/crontab
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SwiftCafe 享受代码的乐趣

Crontab - 定时任务必备招式

swift 发布于 2020年12月21日 crontab 简介

这里的伙伴大多数做客户端开发的,可能对服务端相关的内容关注的相对少一些。 crontab 是这样一个工具,他能够根据你给出的配置在指定的时间执行任务。比如定期删除过期的日志文件(很多服务端环境,会生成大量的日志文件,在你不经意间就会把你的硬盘填满)。当然,它的应用不仅限于服务端,对于自己本地的电脑来说,也有它的用处。

crontab 是 Unix 系统的标配,几乎我们常见的大多数类 Unix 系统都自带 crontab, 包括 MacOS。 Crontab 名字的来源是 chronos - 一种极客们对时间的叫法。 关于它的更多内容,大家可以参考 Wikipedia 上面的描述:https://en.wikipedia.org/wiki/Cron

使用方法

简单做了介绍之后,咱们来看看怎么使用。 大家可以在自己电脑的命令行中输入:

$ crontab -l

这个命令, 然后你应该会看到类似的输出:

crontab: no crontab for xxx

这个命令是用于列出你电脑上已有的计划任务,因为我们现在还没有指定任何计划任务,所以这个输出就像上面那样,告诉我们没有计划任务。 如果想添加自己的计划任务,可以输入这个命令:

$ crontab -e

这个命令会用 vi 打开一个命令行编辑器,你可以在这里编辑计划任务的描述。 crontab 描述文件中每一行代表一个任务,每一行的格式如下:

* * * * * rm /home/someuser/tmp/*

前面 5 个星号代表时间设置,从左到右每个星号的位置分别对应

分钟(0-59) 小时(0-23) 每月中的天(1-31) 每年中的月(1-12) 每周中的星期几(0-6) 0 代表星期日

每个星号的位置,可以是星号本身,也可以是具体的数字。 如果是星号本身,代表不加限制。 如果是数字,代表指定的时间。 举几个例子:

* * * * * // 5个都是个星号,代表每分钟都会执行。
30 * * * * // 每到 30分的时候执行一次,也就是每小时执行两次。
* 18 * * * // 每天的 18 点执行一次。
* */2 * * * // 每隔 2 小时执行一次, */ 是间隔时段的表示法。

以上是 crontab 时间设置个几个常用示例, 只要按照我们上述的每隔时间点的规则来使用,几乎可以满足我们绝大部分计划任务的需求。

在时间配置之后, 就是我们要执行的脚本文件,比如我们想在每天早上 8 点的时候清空机器上的临时文件,就可以这样配置:

* 8 * * * rm /home/someuser/tmp/*

每天 8点的时候,就会执行后面的 rm 命令, 删除临时文件夹中的文件。 后面的这个命令行内容,可以是任何的 Shell 命令,包括 pipe 操作,比如:

* 8 * * * rm /home/update.sh > /var/log/update.log

这个配置会在每天 8 点的时候, 执行一个叫做 update 的脚本, 并将日志输出流重定向到 update.log 文件中。 这时我们的命令行界面应该是这样的:

1f9gqf7cj515z3zr.png

编辑完成后, 按下 Esc 键, 然后输入 :wq(代表保存并退出,这个是 vi 文本工具的使用方法), 在命令行左下角是下面图片中的状态的时候,按下回车键:

1f9gqf7cj515z45s.png

这样就保存了我们刚刚编辑的任务列表,我们再输出 crontab -l 命令,可以看到任务被成功添加了。

这样就 ok 了。剩下的事情就交给 crontab 来处理了。

结语

crontab 是 Unix 系统中标配的计划任务工具,它的原理并不复杂,crontab 是一个守护进程,不停的检测它的任务列表是否符合执行条件,如果符合,就执行任务。这里跟大家聊的都是 crontab 比较常规的用法,更详细的文档,大家可以通过 man crontab 命令自行查看。相信它对大家的日常工作还是比较有帮助的。

如果你觉得这篇文章有帮助,还可以关注微信公众号 swift-cafe,会有更多我的原创内容分享给你~

本站文章均为原创内容,如需转载请注明出处,谢谢。
qrcode.jpg 关注微信公众号
发现更多精彩
swift-cafe


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK