Linux 服务 | crond
crond 是定时任务管理工具
通常服务器默认安装并启动了 crond
可以在 crontab 中自定义定时任务信息
crontab 命令
-
crontab file
,用 file 文件内容替换原来的内容 -
crontab -e
,打开当前登录用户的定时任务列表 -
crontab -l
,列出当前登录用户的所有定时任务 -
crontab -r
,删除当前登录用户的所有定时任务,加-i
则在删除前询问 -
-u
,指定操作用户。查看 owner 用户的定时任务用crontab -u owner -l
,也可以结合-e / -r / file
-
在 Linux 系统中,一切皆文件,crontab 对应的文件在
/var/spool/cron/
目录中,文件以系统用户名命名
crontab 内容设定
配置文件
# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
-
RANDOM_DELAY=45
随机延迟时间为 45min -
START_HOURS_RANGE=3-22
生效时间为 3 点到 22 点 -
分别定义了 cron.daily、cron.weekly、cron.monthly 执行周期、延迟时间及执行命令
定时任务设定
.---------------- 分 (0 - 59)
| .------------- 时 (0 - 23)
| | .---------- 日 (1 - 31)
| | | .------- 月 (1 - 12)
| | | | .---- 星期 (0 - 6) (星期日可为0或7)
| | | | |
* * * * * 执行的命令
-
前面五个星号组成任务执行时间,后面是具体执行的命令
-
执行时间的设定有几种方式,可自由组合
-
固定时间,
55 14 02 03 *
表示 3 月 2 日 14 点 55 分 -
多个时间点,
0 3,6,9 * * *
表示每天的 3 点、6 点、9 点整执行 -
固定间隔点,
0 1-15/3 * * *
表示每天的 1 点到 15 点,隔 3 小时执行一次 -
连续时间点,
0 0 1-7 * *
表示每个月的 1 日到 7 日,每天零点执行
-
环境变量设定
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
-
SHELL
表示执行命令的解析工具,还可以是tcsh、dash、csh
等 -
PATH
表示系统命令路径,设定后不再需要写命令文件全路径,会自动去 PATH 下面找 -
MAILTO
表示执行命令的输出内容发送到指定用户邮箱 -
获取 crontab 环境变量,
* * * * * /usr/bin/env > /tmp/env.txt
内容输出设定
定时任务通常会记录 log,方便收集并分析数据
0 15 * * * /usr/owner/check.sh > /tmp/check.log 2>&1
-
>
表示执行 sh 文件内容输出到 check.log 文件,并覆盖之前的 log 内容 -
>>
表示执行命令输入内容追加到 check.lo 文件 -
2>&1
表示标准错误重定向到标准输出-
2
是标准错误 -
1
是标准输出 -
&
表示后面的1
不是文件,而是标准输出。区别于2 > 1
-
-
不做输出重定向时,输出内容发送到了上面环境变量设定的
MAILTO
用户的邮件中,在/var/spool/mail/
目录下 -
没有输出重定向,同时关闭了
MAILTO
,则会输出到/var/spool/clientmqueue
中,长期积累会大量占用磁盘容量
系统定时任务
-
/etc/crontab
按照指定时间执行的任务列表 -
/etc/cron.d/*
-
/etc/cron.daily/*
每天执行的任务 -
/etc/cron.hourly/*
每小时执行的任务 -
/etc/cron.monthly/*
每个月执行的任务 -
/etc/cron.weekly/*
每周执行的任务 -
也可以把定时任务内容放在上面对应的目录下,不需要再写入 crontab 中
crond 服务
crond 服务默认安装并启动,也可以通过重启、停止等操作分析解决问题
-
systemctl status crond
查看状态 -
systemctl start crond
启动 -
systemctl stop crond
停止 -
systemctl restart crond
重启
排错
-
crond 服务是否正常启动
-
crontab 五个星号对应设定的时间是否正确
可以用线上工具快速检查在线检测
-
命令是否在
PATH
指定的目录中 -
df -h
确认磁盘是不是有空余 -
是否正确设定了输出重定向
秒级定时任务可以适当采用延时执行实现。例:
* * * * * sleep 5; curl www.test.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?