

linux crontab 定时任务详解 - YahuiAn
source link: https://www.cnblogs.com/yahuian/p/linux-crontab.html
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.

linux crontab 定时任务详解

正如闹钟对于日常生活的重要性一样,linux crontab 定时任务在开发中是必不可少的工具,诸如:每六个月清理一次日志,每天凌晨 12.00 重启服务等多种场景,都可以用 crontab 搞定。
本文测试环境为 Ubuntu 22.04,某些细节不同的发行版可能有所差异,以各自手册为主。
友情提示:在你的 .bashrc
文件中设置你常用的编辑器,比如: export EDITOR=vim
,后续编辑的时候就不会弹出其他陌生的编辑器了。
输入 crontab -e
并在文件末尾输入 */2 * * * * date >> /tmp/test-crontab.txt
(后续会对这句话的含义做解释,此处先不用纠结),多等待几分钟后看看 /tmp 目录下生成的 test-crontab.txt 文件中的内容。

如上图所示,我们实现了每隔 2 分钟将当前日期追加到文件中的功能,一行命令一句表达式,crontab 的使用就是这么简单。
在详细解释 crontab 表达式的具体含义之前,来看看其他的操作。
crontab -l
查看当前运行的定时任务
crontab -r
删除所有的定时任务
注意:如果要停止某个定时任务,只需要 -e
的时候使用 #
将其注释即可。
.---------------- 分 minute (0 - 59)
| .------------- 时 hour (0 - 23)
| | .---------- 天 day of month (1 - 31)
| | | .------- 月 month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- 周 day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
m h dom mon dow
特殊的取值
* 所有,例如对于 minute 来说,* 等价于 0-59
, 数组,例如 1,3,5
- 段,例如 1-3 等价于 1,2,3
/ 间隔,例如对于 minute 来说,*/2 代表每 2 分钟
它们也可以结合在一起使用,如:1-5/2
特殊的写法
除了上面的表达式之外,还有类似编程语法中的语法糖,更加直白一点
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
说的再多,不如实战几个例子来得更加清晰易懂
5 0 * * *
每天的 00:05 点
15 14 1 * *
每个月 1 号的 14:15
0 22 * * 1-5
每周从周一到周五 22:00
虽然 crontab 不复杂,但是也没那么直白,需要大脑稍微翻译一下,并且 crontab 不太方便测试任务什么时间运行,此时借助在线的 https://crontab.guru/ 工具,我们就能写出正确的表达式,并且点击 next
还可以看到任务运行的时间点。

多用户管理
linux 系统是一个多用户系统,crontab 也支持多用户,默认使用当前用户,使用 crontab -u username
便可以指定其他用户。
比如 sudo crontab -u root -e
便可编辑 root 用户的配置,不同用户的配置保存在 /var/spool/cron/crontabs
目录下。
除此之外,/etc/cron.allow
文件控制哪些用户可以使用 crontab,/etc/cron.deny
文件控制哪些用户不可以使用 crontab。
系统级的 crontab
/etc/crontab
文件中设置的是一些系统级的定时任务,其中每行都多了一个执行用户,并且直接编辑该文件而不是使用 crontab
命令来管理。

所有的定时任务都是由 cron
守护进程来负责调度执行的,如果任务未按照你的预期运行,可以通过 systemctl status cron.service
查看守护进程是否 running。
下图的日志还可以看到由于缺少用户名导致语法错误,一个定时任务被忽略,使用 journalctl -u cron.service
还可以查看更多的日志信息。

man 1 crontab
man 5 crontab
man 8 cron
本文永久地址:https://github.com/yahuian/blog/blob/master/linux/crontab/README.md
读者有任何疑问,欢迎在 issues 区留言讨论~
Recommend
-
101
Linux系统的定时任务是由cron(crond)这个系统服务来控制的。Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外,由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab命令。一、crond简介crond...
-
46
Linux - @shengchao -
-
12
SwiftCafe 享受代码的乐趣 Crontab - 定时任务必备招式swift 发布于 2020年12月21日 crontab 简介 这里的伙伴大多数做客户端开发的,可能对服务端相关的内容关注的相对少一些。 crontab 是这样一个工...
-
14
自己租用了一台阿里云的服务器,然后是按流量收费的,结果发现这天每个小时都有接近600m的公网流量流出,而且每个时段都一致,如果再这样下去,一年得花5k来养活这台机器。。。经过各种排查,发现主要是某个ip流出的流量过多,从阿里云管理控制台禁用该ip后...
-
10
替代crontab,统一定时任务管理系统cronsun简介 | 张戈博客Jager · 11月19日 · 2017年crontab · 定时任务 1096次已读
-
10
Django定时任务Django-crontab的使用 在使用的dj...
-
3
前言 更好熟悉掌握at、crontab定时自定义任务用法。 实验at、crontab定时自定义任务运用场景案例。 作业、笔记需要。
-
5
-
9
首页技术宅Linux苹果cms定时任务 Crontab设置苹果cms自动更新脚本...
-
6
linux 使用crontab 创建定时任务 转载请注明出处:...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK