在Linux中,可以使用crontab命令指定定时执行的定时任务,即在指定的时间点定时执行任务,而不是执行一次后不停止再执行一次。这个crontab命令用于设置在指定的时间点执行特定的操作,由特定格式的信息指定,并将这些信息写入一个crontab文件。这些计划任务由cron守护进程执行,它始终在后台运行,并定期检查crontab文件以确定需要做什么。如果需要执行任务,则执行任务指定的操作。一般来说,系统启动时,init进程会启动cron进程。可以使用mancrontab查看crontab命令的帮助信息。使用man5crontab查看ctontab文件的格式,需要根据具体的格式设置定时任务。使用man8cron命令查看cron守护进程的帮助信息。编辑计划任务在crontab命令中,可以使用-e选项指定编辑计划任务。查看mancrontab对-e选项的说明如下:-e选项用于使用VISUAL或EDITOR环境变量指定的编辑器编辑当前crontab。退出编辑器后,修改后的crontab会自动安装。如果两个环境变量均未定义,则使用默认编辑器/usr/bin/editor。即crontab-e命令编辑当前用户的crontab文件,按照特定的格式在文件中添加定时任务。首选VISUAL,或者使用EDITOR环境变量值指定的编辑器进行编辑。如果这些环境变量均未定义,则默认使用/usr/bin/editor文件中指定的编辑器。在Debian系统和Ubuntu系统上,/usr/bin/editor文件是一个链接文件,最终链接到/bin/nano文件,即默认使用nano编辑器。在Ubuntu系统上测试发现,第一次执行crontab-e命令时,会调用select-editor命令提供一个编辑器菜单列表,可以选择一个默认的编辑器。如果按CTRL-D,则不会选择任何内容,默认情况下将使用nano编辑器。crontab文件格式执行crontab-e命令后,将打开当前用户的crontab文件。在这个文件中,#开头的语句是注释语句。默认的crontab文件包含一些注释,这些注释提供了用于设置cron作业的字段格式的示例和描述。具体内容如下:#例如,你可以在每周早上5点对你所有的用户帐户进行备份:#05**1tar-zcf/var/backups/home.tgz/home/##mhdommondow命令下面是一个05**1tar-zcf/var/backups/home.tgz/home/定时任务的例子,每周一五点执行tar-zcf/var/backups/home.tgz/home/命令。下面详细说明如何理解这个定时任务的各个字段。在crontab文件中,通过mhdommondow命令的六个字段设置定时任务,每一行对应一个定时任务。这六个字段的含义解释如下:m:对应分钟(minute)指定一小时中的分钟数来执行任务。取值范围为0-59.h:对应小时(hour)指定一天中的小时执行任务。取值范围0-23.dom:对应日期(月中的某天)指定一月份的哪一天执行任务。取值范围0-31.mon:对应月份(month)指定一年中的哪一个月执行任务。取值范围为1-12。也可以用月份英文名的前三个字母指定,不区分大小写。比如January的英文单词是january,那么这里可以用jan来指定January。dow:对应星期几(dayofweek)指定星期几执行任务。取值范围为0-7,0和7都对应星期日。也可以用星期英文名称的前三个字母来指定,不区分大小写。例如星期一的英文单词是monday,那么可以用mon来指定星期一。command:对应具体的操作提供具体的命令来指定执行什么操作,也可以提供脚本文件的路径来执行脚本文件。这六个字段需要用空格分隔。并且每个字段都必须提供一个值,一个字段的值不能省略。从第五场开始的一切都属于第六场,也就是要执行的动作。前五个字段可以使用以下特殊字符来指定一些特殊时间:*表示任何有效值。例如,将日期指定为*表示该任务将每天执行。-指示有效范围值。例如指定小时为8-11,表示任务会在8点、9点、10点、11点执行。,表示分隔不同的值列表。例如,指定小时为2、3、5、7,表示任务将在2点、3点、5点、7点执行。注意:逗号后不要加空格,空格是分隔不同字段的意思。/表示时间间隔,而不是指定具体时间。例如,指定小时为*/2表示任务将每两小时执行一次。在命令字段中,可以使用换行符或%字符来分隔命令内容。第一个%之前的所有内容都传递给shell执行,%本身被替换为换行符,%之后直到行尾的所有内容都作为标准输入传递。如果需要提供%字符本身,则需要使用\%对其进行转义。cron守护进程如何执行计划任务在man5crontabdescription:cron(8)守护进程自动设置了几个环境变量。SHELL设置为/bin/sh,LOGNAME和HOME是从crontab所有者的/etc/passwd行设置的。PATH设置为“/usr/bin:/bin”。HOME、SHELL和PATH可能会被crontab中的设置覆盖;设置命令路径的另一种方法是使用这样一个事实,即许多shell将波浪号(~)视为$HOME的替代品,因此如果您将bash用于您的tasks你可以这样使用:SHELL=/bin/bashPATH=~/bin:/usr/bin/:/bin即cron守护进程默认使用shell/bin/sh来执行crontab文件指定的命令.如果你想使用bash来执行,你可以在crontab文件中加入SHELL=/bin/bash这一行。默认寻址路径是“/usr/bin:/bin”。如果要执行的命令或脚本文件不在这两个路径下,则需要通过文件路径指定。建议使用绝对路径。由于定时任务是由cron守护进程执行的,因此需要先确认该进程已经启动,然后才能执行定时任务。您可以使用以下命令确认cron守护进程是否已启动:$service--status-all|&grepcron[+]cron$ps-e|grepcron2340?00:00:36cron在service--status-all|&grepcron命令中,可以看到cron前面有一个加号+,表示cron守护进程已经启动。在ps-e|grepcron命令,如果能找到cron这个名字,说明cron进程正在运行。定时任务设置示例我们使用crontab-e命令打开crontab文件后,可以输入如下一行:*/5****date>>~/testcron.txt根据前面的描述,第一个*/5表示每5分钟执行一次,后面的四个*表示该任务将在每个月的每天的每个小时执行一次。具体执行命令为date>>~/testcron.txt,将任务执行的时间追加到testcron.txt文件中。即,此计划任务将每天运行一次,每5分钟运行一次。您可以通过查看testcron.txt文件来确认任务已执行。保存文件后,再过5分钟,查看testcron.txt文件内容如下:$lstestcron.txt$cattestcron.txtTuesday,December03,201914:20:01CST可以看到生成了testcron在指定的目录中。txt文件,文件内容为date命令打印的日期,表示指定的定时任务已经执行完毕。隔了半天,查看testcron.txt文件内容如下:$cattestcron.txtTuesday,December03,201914:20:01CSTTuesday,December03,201914:25:01CST,December03,2019At星期二14:30:01CST,可以看出日期确实是每5分钟写入一次testcron.txt文件。查看crontab命令的内容在crontab命令中,可以使用-l选项查看crontab文件的内容,从而查看其中包含的各种定时任务。参见mancrontab对-l选项的描述如下:-l选项使当前的crontab显示在标准输出上。该文件将打印crontab文件的全部内容,包括注释语句。部分内容罗列如下:#mhdommondowcommand*/5****date>>~/testcron.txt其实直接执行crontab-e也可以看到crontab文件的内容命令,但阅读后需要退出编辑器。不如crontab-l命令方便。删除定时任务如果要删除某个定时任务,执行crontab-e命令,从crontab文件中删除定时任务对应的行,并保存文件。还可以对相应行进行注释,方便以后需要的时候开启注释。如果要删除所有cron作业,可以使用-r选项。查看mancrontab对-r选项的说明如下:-r选项导致当前的crontab被删除。即-r选项会删除当前用户的crontab文件,从而删除所有定时任务。
