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

posted @ 2023-03-02 17:55  菜乌  阅读(177)  评论(0编辑  收藏  举报