每天学一个 Linux 命令(98):crontab
Posted 民工哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天学一个 Linux 命令(98):crontab相关的知识,希望对你有一定的参考价值。
命令简介
在服务器安装好系统及相关服务之后,对于系统的配置、服务的配置、数据的管理以及服务器的操作权限管理就变的尤为重要。因为,涉及到服务器的各项安全(如:登录、操作)。
crontab 命令用来打开 cron 表进行编辑。
定时任务:顾名思义,就是定期执行某项操作或者某种行为。像Windows系统同样它也有定时任务服务。
在Linux系统中,crond是Linux系统中用来定期执行命令、脚本或指定程序的一种服务。定时任务一般有以下两种用途:
- 1、系统自身定期执行的操作或任务(如:日志轮询)。
- 2、用户定期执行的操作或任务(如:定时更新同步数据、重要数据备份等)。
Linux下的任务调度分为两类:系统任务调度和用户任务调度
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc/目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab 文件内容如下
[root@centos7 ~]# 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
从上机的配置文件,可以看出系统定时任务格式/etc/crontab分为6段,以空格分隔。前5段为时间格式,第6段是所需执行的命令。详细的说明:
minute #分钟,可以是从0到59之间的任何整数
hour #小时,可以是从0到23之间的任何整数
day #日期,可以是从1到31之间的任何整数
month #月份,可以是从1到12之间的任何整数
week #星期,可以是从0到7之间的任何整数,这里的0或7代表星期日
command #执行的命令,可以是系统命令,也可以是自己编写的脚本文件
在上述的配置字段中,还会使用到下面的特殊字符
*(星号) #表示所有值。比如在第一段中如果使用*,则表示在满足其他条件的同时每分钟都执行后面的命令操作。
,(逗号) #用逗号分隔的值表示指定的一个范围。比如在第四段使用1,3,5,7,则表示在第1,3,5,7月的含义。
—(中杠) #表示一个范围。比如在第二段使用0-8,则表示0点到8点这一区间范围。
/(正斜线) #表示一个时间的间隔频率。比如在第一段使用*/5,则表示每间隔5分钟的含义。
语法格式
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
选项说明
-e #编辑该用户的计时器
-l #列出该用户的计时器
-r #删除该用户的计时器
-u<用户名称> #指定要设定计时器的用户名称
定时任务书写与配置
书写定任务规范
在日常实际生产、测试环境中,书写定时任务是需要遵守一定的规范、规则的。笔者根据自己实际生产环境书写经验,总结如下:
- 1、书写定时任务时必须对每一行或一段加上注释信息。
- 2、如里是以shell脚本执行的任务,在最前面加上解释/bin/sh。
- 3、对于执行脚本的定时任务,需在其结尾加上>/dev/null 2>&1将一些不必要的输出信息重定向到空,也就是不输出不需要的信息。
- 4、使用系统或服务命令要使用绝对路径,再写到脚本,最后将脚本写进定时任务中。
- 5、规范使用目录(如定时任务执行的脚本目录设置成/server/cron_scripts)。
2)定时任务配置
实际生产、测试环境,对于定时任务的配置也是需要有一定操作规范的,具体如下:
- 1、对于执行命令的形式的定时任务,需要先测试命令执行情况,确认无误后将执行的命令写进脚本。
- 2、对于脚本形式的定时任务,首先就是需要调试脚本的整体执行情况,然后使用规范目录路径写进定时任务。
- 3、对于生产环境的定时任务操作,必须在测试环境进行反复测试,确认无误后再应用到实际生产环境中,然后在定时任务执行后人工进行检查执行情况。
对于定时任务的具体实例及各类操作,可参考官方文档说明。读者也可在自己的实验环境进行书写、配置,本章节就不做过多赘述。
以上的内容源自民工哥的新书《 Linux 系统运维指南 从入门到企业实战 》
应用举例
查看当前登录用户下的定时任务情况
[root@centos7 ~]# crontab -l
no crontab for root
每小时的第5和第15分钟执行
5,15 * * * * command_name
在上午9点到11点的第5和第15分钟执行
5,15 9-11 * * * command_name
每隔3天的上午9点到11点的第5和第15分钟执行
5,15 9-11 */3 * * command_name
每个星期一的上午9点到11点的第5和第15分钟执行
5,15 9-11 * * 1 command_name
每月1、11、21日的14:45重启httpd
45 14 1,11,21 * * /etc/init.d/httpd restart
每周六、周日的1:10重启smb
10 1 * * 6,0 /etc/init.d/httpd restart
每小时执行/etc/scripts/test.sh这个脚本
01 * * * * /etc/scripts/test.sh
每天学一个 Linux 命令(96):ntpdate
每天学一个 Linux 命令(97):jobs
以上是关于每天学一个 Linux 命令(98):crontab的主要内容,如果未能解决你的问题,请参考以下文章