Linux——crontab计划任务

一、cron介绍

Linux 中的cron工具往往应用于自动化任务,它易于管理,简单易用。cron 作业是在 crontab 文件中按照cron expression写的 shell 脚本或 Linux 命令,这些命令通常可以是任何命令。它允许我们安排每个用户想要在特定时间执行的多个作业,每个作业称为 cron 作业。

其中crontab任务列表存储在如下目录:

/var/spool/cron/crontabs/

1.1cron作用

  1. 自动执行按指定时间间隔备份数据库、文件和系统目录的过程。这不仅可以确保系统故障或数据丢失时的数据可用性,还可以确保数据完整性。
  2. Linux 管理员可以使用 Ubuntu cron 作业在计划的时间生成和发送自动报告。这些报告提供有关安全事件、系统性能或其他关键活动的见解。通过这种方式,cron 作业有助于增强监控和决策过程。
  3. 使用 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

Linux crontab 输出重定向不生效问题解决 — Mengalong

posted on   黑夜、问白天  阅读(114)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示