基础服务管理篇(四)——crontab定时任务


1.概念

定时任务就是后台运行,到了预定的时间就会自动执行的任务,前提是要事先手动将计划任务设定好。如:

  • 周期性任务执行
  • 清空/tmp目录下的内容
  • mysql数据库备份

2.作用

操作系统不可能24小时都有人在操作,有些时候想在指定的时间点去执行任务,此时不可能真的去在指定时间执行命令,这就可以交给计划任务程序去执行操作

3.查看计划任务

语法:crontab 选项
-l 列出指定用户计划任务表
-e 编辑指定用户计划任务表
-u 指定的用户名,若不指定,则表示当前用户
-r 删除指定用户的计划任务表
[root@localhost ~]# crontab -l
12 3 * * * /usr/bin/tar -zvf /opt/mysql_back.tgz /mysql_data &> /dev/null  

4.编辑计划任务

[root@localhost ~]# crontab -e
计划任务的规则语法格式,以行为单位,一行则为一个计划:
分 时 日 月 周 需要执行的命令(!!!绝对路径)
[root@localhost ~]# cat /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
  分 时 日 月 周  用户名     需要执行的命令

取值范围:
分:0~59
时:0~23
日:1~31
月:1~12
周:0~7,0和7表示星期天

符号含义:
*:表示取值范围中的每一个数字
-:做连续区间表达式的,要想表示1~7,则可以写成1-7
/:表示每多少个,例如:想每 10 分钟一次,则可以在分的位置写:*/10
,:表示多个取值,比如想在1点,2点,6点执行,则可以在时的位置写1,2,6

# 使用which、whereis命令搜索绝对路径
[root@localhost ~]# whereis echo
echo: /usr/bin/echo /usr/share/man/man1/echo.1.gz /usr/share/man/man3/echo.3x.gz

[root@localhost ~]# which echo
/usr/bin/echo

5.crontab的权限

任何用户都可以创建计划任务crontab,但是root用户可以通过配置来设置某些用户的权限,不允许他们设置计划任务

5.1 黑名单配置文件

/etc/cron.deny写入用户名,一行只能写一个

禁止用户设置定时任务
[root@localhost ~]# vim /etc/cron.deny 

[root@localhost ~]# cat /etc/cron.deny 
jerry01 jack01

5.2白名单配制文件

/etc/cron.allow(本身不存在,需要自己创建)
!!白名单优先级高于黑名单,如果一个用户同时存在两个名单文件中,则会被默认允许创建计划任务

6.计划任务文件保存路径

/var/spool/cron/用户名 该目录存放用户的定时任务信息

[root@localhost ~]# ls /var/spool/cron/
jerry01  root

7.计划任务日志信息

/var/log/cron 该文件用于记录哪些用户执行了哪些任务