Linux——crontab计划任务
一、cron介绍
Linux 中的cron工具往往应用于自动化任务,它易于管理,简单易用。cron 作业是在 crontab 文件中按照cron expression写的 shell 脚本或 Linux 命令,这些命令通常可以是任何命令。它允许我们安排每个用户想要在特定时间执行的多个作业,每个作业称为 cron 作业。
其中crontab任务列表存储在如下目录:
/var/spool/cron/crontabs/
1.1cron作用
- 自动执行按指定时间间隔备份数据库、文件和系统目录的过程。这不仅可以确保系统故障或数据丢失时的数据可用性,还可以确保数据完整性。
- Linux 管理员可以使用 Ubuntu cron 作业在计划的时间生成和发送自动报告。这些报告提供有关安全事件、系统性能或其他关键活动的见解。通过这种方式,cron 作业有助于增强监控和决策过程。
- 使用 crontab,您可以定期检查服务的可用性。这种监视方法有助于检测和解决服务中断问题。
1.2cron安装
几乎所有Linux发行版都默认安装了cron工具,但是如果使用ubuntu,可能需要亲自安装cron。
#更新最新的包索引 sudo apt update #使用apt包管理工具安装cron sudo apt install cron #确保系统每次启动后台运行cron sudo systemctl enable cron #检查 systemctl status cron #Output Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron
按照上述操作执行后,可以使用cron命令开始执行计划调度任务了。
二、cron语法Syntax
属性说明
Field 属性 | Allowed Values 允许的值 |
---|---|
minute 分钟 | 0-59 |
hour 小时 | 0-23 |
Day of the month 月份中的某一天 |
1-31 |
month 月 | 1-12 or JAN-DEC 1-12 或 JAN-DEC |
Day of the week 星期几 |
0-6 or SUN-SAT 0-6 或 SUN-SAT |
cron规则
minute hour day_of_month month day_of_week command_to_run
下述操作说明:每周二下午5:30下载http://www.google.com 的网页数据
30 17 * * 2 curl http://www.google.com
一些特殊字符的使用
*
:在 cron 表达式中,*
是表示“all”的通配符变量。因此,计划的任务 * * * * * ...
将在每个月的每一天、每一小时的每一分钟运行。
,
:逗号将计划值分解以散列值。如果你想让一个任务在每小时的开始和中间运行,而不是写出两个单独的任务(例如, 0 * * * * ...
和 30 * * * * ...
),你可以用一个 ( 0,30 * * * * ...
) 来实现相同的功能。
-
:连字符表示明细表字段中的值范围。对于要在每小时 0 * * * * ...
1 * * * * ...
2 * * * * ...
的前 30 分钟运行的命令,您可以将其安排为 0-29 * * * * ...
.
/
:您可以使用带有星号的正斜杠来表示步长值。例如,与其写出八个单独的 cron
任务来每三个小时运行一次命令(如、 0 0 * * * ...
、 0 3 * * * ...
、 0 6 * * * ...
等),不如将其安排为按如下方式运行: 0 */3 * * * ...
。
注意:不能任意表示步长值,您只能使用整数,这些整数被均匀地划分为相关字段允许的范围。例如,在“小时”字段中,您只能在正斜杠后面加上 1
、 2
、 3
、 4
、 6
、 8
或者 12
。
一些表达式练习及说明:
* * * * *
- Run the command every minute.
* * * * *
- 每分钟运行一次命令。12 * * * *
- Run the command 12 minutes after every hour.
12 * * * *
- 每小时的第12分钟运行一次命令。0,15,30,45 * * * *
- Run the command every 15 minutes.
0,15,30,45 * * * *
- 每 15 分钟运行一次命令。*/15 * * * *
- Run the command every 15 minutes.
*/15 * * * *
- 每 15 分钟运行一次命令。0 4 * * *
- Run the command every day at 4:00 AM.
0 4 * * *
- 每天凌晨 4:00 运行该命令。0 4 * * 2-4
- Run the command every Tuesday, Wednesday, and Thursday at 4:00 AM.
0 4 * * 2-4
- 每周二、周三和周四凌晨 4:00 运行该命令。20,40 */8 * 7-12 *
- Run the command on the 20th and 40th minute of every 8th hour every day of the last 6 months of the year.
20,40 */8 * 7-12 *
- 在一年中最后 6 个月的每一天,每 8 小时的第 20 分钟和第 40 分钟运行该命令。
三、管理和运行crontabs
我们已经学会了cron的作用和语法,只需要将cron作业放置到crontabs中(守护程序能够读取到的地方)。
我们一般使用crontab命令来编辑和配置这些信息,相比直接编辑可以起到权限控制和语法检查的作用。
#edit编辑计划任务,如果是第一次使用需要选择crontab的默认编辑器 crontab -e #如果需要后续修改编辑器,输入如下命令 select-editor #remove删除计划任务,注意不会提示确认,如果需要提示需要-i参数 crontab -r #list列出计划任务 crontab -l
注意:在 Linux 系统上, /etc/
该目录下存储了另一个 crontab
。这是一个系统范围 crontab
的字段,它有一个附加字段,每个 cron
作业都应在其下运行用户配置文件。本文重点介绍特定用户 crontabs
的 ,但如果您想编辑系统范围 crontab
的 ,您可以使用以下命令执行此操作:
sudo vim /etc/crontab
实操
crontab -e
编写一个定时任务,每天22.30分写入文本
30 22 * * * echo 'Hello cron every minute!' >> /root/projects/aaa.txt
权限管理
您可以管理允许哪些用户将命令 crontab
与 cron.allow
和 cron.deny
文件一起使用,这两个文件都存储在目录中 /etc/
。如果 cron.deny
文件存在,则其中列出的任何用户都将被禁止编辑其 crontab
.如果 cron.allow
存在,则只有其中列出的用户才能编辑其 crontab。如果两个文件都存在,并且每个文件中都列出了相同的用户,则该 cron.allow
文件将覆盖 cron.deny
,并且用户将能够编辑其 crontab
.
sudo echo ALL >>/etc/cron.deny sudo echo Sam >>/etc/cron.allow
Special Syntax特殊语法
您还可以在 crontab
文件中使用几个速记命令来帮助简化作业计划。它们实质上是指定的等效数字计划的快捷方式:
说明 | 表达式 |
---|---|
@hourly |
0 * * * * |
@daily |
0 0 * * * |
@weekly |
0 0 * * 0 |
@monthly |
0 0 1 * * |
@yearly |
0 0 1 1 * |
参考资料
How To Use Cron to Automate Tasks on Ubuntu 18.04 | DigitalOcean
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!