searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Linux crontab命令实现定时任务

2024-06-04 09:06:53
0
0

在日常中,我们常常需要linux系统来执行定时任务。而这时就需要我们使用crontab命令来完成此项任务。

crontab 命令介绍

crontab命令被用于提交和管理用户提交的需要定期执行的任务。而crontab命令需要crond服务支持。crondLinux下用来周期地执行某种任务或等待处理某些事件的一个守护进程。在安装linux系统时,crond一般会被自动安装。我们可以通过如下的命令查看、启动、重启crond服务。

$ service crond status # 查看crond状态
$ service crond start # 启动crond服务
$ service crond restart # 重启crond服务

crontab 语法

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

Options:
 -u <user>  define user 
 # 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo用户的 crontab 服务,此选项一般有 root 用户来运行。
 -e         edit user's crontab 、
 # 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
 -l         list user's crontab
 # 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
 -r         delete user's crontab
 # 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
 -i         prompt before deleting 
 # 在删除用户的 crontab 文件时,给确认提示。
 -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

注意:这里的 file 指的是包含待执行任务的crontab文件。

任务的定义

crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

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

注意:在定义任务时,我们可以分别以周或者是日月为单位作为循环,但我们不可使用 几月几号且为星期几 的模式工作。

下面的例子是一个错误的写法:

30 12 11 9 5 root echo "test mission"

设置定时任务

我们可以如下的几种方式进行定时任务的设置。

  • 用户定时任务:使用crontab -e命令

用户定时任务:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。

我们可以使用crontab -e进入某个用户的定时任务编辑界面。如果不指定用户的话,则进入当

前用户的编辑界面。在编辑界面中,一行表示一个定时任务。如下图所示,编辑界面含有两个定时任务。

  • 系统定时任务:编辑/etc/crontab文件

系统定时任务:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

首先,我们先来看看文件的内容。使用cat /etc/crontab,内容如下。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO= root
HOME=/
# 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
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前面四行是用来配置crond任务运行的环境。

第一行:指定了环境所使用的shell。

第二行:指定了系统执行命令的路径。

第三行:指定了crond的任务执行信息将通过电子邮件发送的用户,这里发给root用户。如果为空,则不发给任何人。

第四行:指定了执行命令或者脚本时的主目录。

下面的几行,则是系统执行的任务。每个任务占据一行。

注意:在这里定义任务时,需要指定用户。而用户任务则不需要。

crontab 相关配置文件

  • 用户权限文件
\etc\cron.deny
\etc\cron.allow

使用说明:

  1. 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。
  2. 当系统中只有/etc/cron.deny文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。
  3. Linux 系统中默认只有/etc/cron.deny 文件。
  • 用户任务存放目录
/etc/spool/cron/

说明:所有用户crontab文件存放的目录,以用户名命名。

  • cron.daily cron.hourlycron.weeklycron.monthly目录
/etc/cron.daily/
/etc/cron.hourly/
/etc/cron.weekly/
/etc/cron.monthly/

说明:在四个文件夹里面存放了crond按天、小时、周和月执行的脚本。

解释:

看一下 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

在系统启动时会读取一次 anacrontab 中的配置参数。

这里以每天举例。在读取完成 anacrontab 文件后,crond 程序会在每天的 4点12分 左右执行一次 cron.daily 下的文件。

参考

  • https://www.runoob.com/w3cnote/linux-crontab-tasks.html
  • http://c.biancheng.net/view/1092.html
  • https://www.cnblogs.com/ftl1012/p/crontab.html
  • https://man.linuxde.net/crontab
  • https://www.cnblogs.com/xd502djj/p/4292781.html
  • https://www.zhihu.com/question/57000081/answer/301299818
0条评论
0 / 1000
c****z
2文章数
0粉丝数
c****z
2 文章 | 0 粉丝