@Mr-13
2020-11-25T10:32:56.000000Z
字数 1969
阅读 86
Linux
crontab
在Linux的使用维护中,我们经常需要“定时”执行某些系统动作,比如:定时进行数据备份、定时执行脚本执行远端数据采集等等,这里会用到crontab。
Linux下任务调度分为两类:系统任务调度
和 用户任务调度
。Linux系统任务调度是由cron(crond)这个系统服务来控制的,这个系统服务是默认启动的。用户自己设置的计划任务则是使用crontab命令。在CentOS系统中,使用 cat /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
前四行用来配置crond任务运行的环境变量:
第一行:
Shell
变量指定了系统要使用哪个shell,这里是bash第二行:
PATH
变量制定了系统执行命令的路径第三行:
MAILTO
变量制定了crond任务执行信息将通过电子邮件发送给root用户,如果该变量为空,则表示不发送任务执行信息给用户;第四行:
HOME
变量制定了在执行命令或脚本时使用的主目录;
我自己在阿里云的Centos7系统上,并没有打印出这一行信息,第四行是空行;可能和系统版本差异有关
所有用户(root,zabbix,postgres等系统用户)定义的corntab任务,都以文件的形式保存在:/var/spool/cron 目录中,其文件名与用户名一致。
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,他的格式共分为6个字段,前五个字段是时间设定字段,最后一个字段是要执行的命令,格式如下:
以上各个字段中,还可以使用以下特殊字符:
*
:代表所有取值范围内的数字,例如:月份字段为*
,表示1~12月;
/
:代表“每一定时间间隔”的意思,例如:分钟字段为*/10
,表示每10分钟执行一次;
-
:代表从某个区间范围,是闭区间。例如:小时字段中0-23/2
表示在0~23点内每隔2小时执行一次。
,
:分散的数字(不一定连续),例如:1,2,3,4,7,9注: 星期字段中,
0
和7
都表示星期天Sunday
.
命令格式:
crontab [-u user] file
crontab [-u user] [-i] {-e | -l | -r}
# -u user : 用于设定某个用户的crontab服务;即:在那个用户下执行该命令;
# file :file为命令文件名,表示将file作为crontab的任务列表文件,并载入crontab中;
# -e :编辑某个用的crontab文件内容,如果不指定用户则表示当前用户
# -l :显示某个用户的crontab文件内容,如果不指定用户则表示当前用户
# -r :从/var/spool/cron目录中删除某个用户的crontab文件
# -i :在删除用户的crontab文件时给确认提示
- crontab有两种编辑方式:
直接编辑/etc/crontab文件
与crontab -e
命令,其中/etc/crontab 文件里的嘉护任务是系统中的计划任务,而用户的计划任务需要通过 crontab -e 命令来完成。
- 每次编辑完某个用户的cron设置后,cron自动在
/var/spool/cron
下生成一个与此用户名同名的文件,该用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只能通过crontab -e 命令来编辑。
- crontab中的command尽量使用绝对路径,否则容易引起因为路径错误导致任务无法执行
- 新创建的任务不会马上执行,至少要等2分钟才能执行,可重启cron来立即执行
- 在crontab文件中
%
表示换行,因此假如脚本或者命令中含有%符号,需要使用\%
来进行转义
/etc/cron.deny
该文件中所列用户不允许使用crontab命令