Crond 快速入门

Cron 是一个用来在Unix和类Unix系统上执行定时任务的工具。Cron的配置文件称为 crontab,它允许用户安排命令或脚本在未来特定的时间自动运行。

安装检查

1、检测系统是否安装crond服务
systemctl status crond

2、如果没有安装,则安装
yum -y install vixie-cron
yum -y install crontabs
  • vixie-cron 软件包是 cron 的主程序;
  • crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
3、服务启停
systemctl start crond     //启动服务
systemctl stop crond      //关闭服务
systemctl restart crond   //重启服务
systemctl reload crond    //重新载入配置
systemctl status crond    //查看crontab服务状态
4、 设置开机自动启动
chkconfig --level 345 crond on
# 或
systemctl enable crond

Crontab 命令

在Linux系统中,我们可以使用 crontab --help 来查看crontab的命令帮助。

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

Crontab 表达式

执行 more /etc/crontab 查看使用方式

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

  *  *  *  *  *   root   python /usr/sbin/qemu-ga_check.py

不同列的参数:

  • 第1列表示分钟 1~59 每分钟用*或者 */1表示
  • 第2列表示小时 1~23(0表示0点)
  • 第3列表示日期 1~31
  • 第4列表示月份 1~12
  • 第5列标识号星期 0~6(0表示星期天)
  • 第6列要运行的命令

特殊符号的含义:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

示例

30 0 * * * /usr/local/etc/rc.d/lighttpd restart   //每晚的00:30重启apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart   //每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart  //每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart  //每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart   //每天18 : 00至23 : 00之间每隔30分钟重启 Apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart   //每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart   //每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart    //晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart    //每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart     //一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44     //每半小时同步一下时间

设置定时任务

直接输入命令 crontab -e 或者编辑文件/etc/crontab 就可以设置定时任务。

crontab -e
或者
vi /etc/crontab

crontab -e 方式

  • 输入 crontab -e
    crontab [-u username] [-l|-e|-r]
    -u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
    -e: 编辑crontab 的工作内容;
    -l: 查阅crontab的工作内容;
    -r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。
  • 按下 a 键进入到编辑模式
  • 输入定时任务表达式,如:0 */1 * * * /home/work/start-service.sh
  • 同时按下 ctrl+c 退出编辑模式
  • 按下 shift+: 输入 wq 退出 crontab

vi /etc/crontab 方式

  • 打开终端,然后输入 crontab -e 命令来编辑 Crontab 文件。
  • 在打开的编辑器中,你可以添加你的定时任务。Crontab的格式如下
    * * * * * /path/to/command arg1 arg2
  • 这五个星号分别代表 分钟、小时、日、月、星期(0-59, 0-23, 1-31, 1-12, 0-7)。例如,如果你想要每天早上5点执行脚本,你可以这样写:
    0 5 * * * /path/to/script.sh
  • 添加完任务后,保存并退出编辑器。Crontab 会自动安装新的配置。
  • 你可以通过crontab -l命令来查看当前用户的Crontab文件。
  • 如果你想删除一个定时任务,你可以打开Crontab文件,然后删除你不想要的行,然后保存并退出。
  • 如果你想停止某个定时任务,你可以使用crontab -r命令来删除当前用户的Crontab文件。

注意:在你的脚本路径或者命令前面加上/usr/bin/env bash或者/bin/sh,这样可以确保无论在哪个环境下,你的脚本都能正确运行。

作者:Jeebiz  创建时间:2024-08-16 14:56
最后编辑:Jeebiz  更新时间:2024-11-01 12:20