CrontabCrontab简介crontab命令在Unix和类Unix操作系统中很常见,用于设置周期性执行的指令。该命令从标准输入设备读取指令,并将它们存储在“crontab”文件中,供以后读取和执行。这个词来自希腊语chronos(χρνο),意思是时间。通常,crontab中存储的指令是由守护进程启动的,crond经常在后台运行,每分钟检查是否有计划的作业需要执行。此类作业通常称为cron作业。系统任务调度:系统需要周期性执行的工作,比如将缓存数据写入硬盘,清理日志等。在/etc目录下有一个crontab文件,它是系统任务调度的配置文件。/etc/crontab文件如下[root@localhost~]#cat/etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root#详见man4crontabs#作业定义示例:#.----------------分钟(0-59)#|.------------小时(0-23)#||.------------月中的第几天(1-31)#|||.--------月(1-12)或一月、二月、三月、四月...#||||.----星期几(0-6)(星期日=0或7)或星期日、星期一、星期二、星期三、星期四、星期五、星期六#||||#*****user-namecommandtobeexecuted[root@localhost~]#前四行是用于配置crond任务运行的环境变量,第一行SHELL变量指定系统将使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径。第三行的MAILTO变量指定crond的任务执行信息将通过邮件发送给root用户。如果MAILTO变量的值为空,则表示不会向用户发送任务执行信息。四行HOME变量指定执行命令或脚本时要使用的主目录。第六至第九行的含义将在下一节中详细描述。这里不多说。用户任务调度:用户需要定时执行的任务,如用户数据备份、定时邮件提醒等。用户可以使用crontab工具自定义自己的定时任务。所有用户定义的crontab文件都存储在/var/spool/cron目录中。它的文件名与用户名相同。crontab文件的含义在用户创建的crontab文件中,每一行代表一个任务,每一行中的每个字段代表一个设置。它的格式分为六个字段。前五个部分是时间设置部分。第六段是要执行的命令段,格式如下:minutehourdaymonthweekcommand其中: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,如果用在分钟字段,表示每十分钟执行一次。linux下crond服务#安装crontab:$yuminstallcrontabs#启动服务$systemctlstartcrond.service#关闭服务$systemctlstopcrond.service#重启服务$systemctlrestartcrond.service#重新加载配置$systemctlreloadcrond.service#查看crontab服务状态:$systemctlstatuscrond.service#添加开机自动启动:$systemctlenablecrond.servicecrontab命令详细命令格式:crontab[-uuser]filecrontab[-uuser][-e|-l|-r]命令功能:通过crontab命令,我们可以定时执行指定的系统命令或shellscript脚本。时间间隔的单位可以是分钟、小时、天、月、周以及以上任意组合。该命令非常适合定期进行日志分析或数据备份。命令参数:-u[UserName]:用于设置某个用户的crontab服务,例如“-uixdba”表示设置ixdba用户的crontab服务,该参数一般由root用户运行。-e:编辑用户的crontab文件的内容。如果没有指定用户,则表示编辑当前用户的crontab文件。-l:显示用户的crontab文件的内容。如果没有指定用户,则表示显示当前用户的crontab文件的内容。-r:从/var/spool/cron目录中删除用户的crontab文件。如果不指定用户,则默认删除当前用户的crontab文件。-i:删除用户的crontab文件时给出确认提示。久而久之,日志信息会非常庞大??,可能会影响系统的正常运行。因此,重定向每个任务非常重要。例如可以在crontab文件中设置如下形式忽略日志输出:0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1/dev/null2>&1意思是先把标准输出重定向到/dev/null,再把标准错误重定向到标准输出,因为标准输出已经重定向到/dev/null,所以标准错误也会重定向到/dev/null,所以日志输出问题解决了。其他注意事项新建的cronjob不会立即执行,至少需要2分钟才能执行。如果cron重新启动,它将立即执行。当crontab突然失效时,可以尝试/etc/init.d/crondrestart来解决问题。或者查看日志看有没有作业执行/报错tail-f/var/log/cron.不要随意运行crontab-r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。该用户的所有crontab都消失了。crontab中的%有特殊含义,就是换行的意思。如果你想使用它,你必须转义%。比如经常使用的日期‘+%Y%m%d’在crontab中是不会执行的。它应该被日期替换为‘+%Y%m%d’
