当前位置: 首页 > Linux

Linux的crontab命令

时间:2023-04-06 05:54:42 Linux

通过crontab命令,我们可以定时执行指定的系统命令或shell脚本。时间间隔的单位可以是分钟、小时、天、月、周以及以上任意组合。该命令非常适合定期进行日志分析或数据备份。>systemctlstart/stop/restart/statuscron命令格式crontab[-u用户]filecrontab[-u用户]{-e|-l|-r}命令参数-uuser:用于为某个用户设置crontab服务;file:file是命令文件的名称,意思是将file作为crontab的任务列表文件,加载到crontab中。如果这个文件没有在命令行上指定,crontab命令将接受在标准输入(键盘)上键入的命令并将它们加载到crontab中。-e:编辑用户的crontab文件的内容。如果没有指定用户,则表示编辑当前用户的crontab文件。-l:显示用户的crontab文件的内容。如果没有指定用户,则表示显示当前用户的crontab文件的内容。-r:从/var/spool/cron目录中删除用户的crontab文件。如果不指定用户,则默认删除当前用户的crontab文件。-i:删除用户的crontab文件时给出确认提示。crontab文件格式字段说明允许取值minutesminutesofanhour0-59HoursofadayHoursofadayHoursofadayHoursofadays0-23DatesofamonthDatesofonedays1-31MonthsofayearMonthsof1-12Dayoftheweek星期几0-6Command任意可以执行的命令常用方法新建一个crontab文件,在向cron进程提交crontab文件之前,先设置环境变量EDITOR。cron进程使用它来确定使用哪个编辑器来编辑crontab文件。99%的UNIX和LINUX用户使用vi。如果你这样做,那么你可以编辑.在$HOME目录下的profile文件中,加入这样一行EDITOR=vi;exportEDITOR并保存退出。让我们创建一个名为cron的文件,其中是用户名,例如davecron。将以下内容添加到此文件中。#(在这里输入你自己的首字母)每隔#15分钟在下午6点到早上6点之间将日期回显到控制台0,15,30,4518-06***/bin/echo'date'>/dev/console保存并退出。请注意,前5个字段由空格分隔。在上面的例子中,系统会每隔15分钟向控制台输出一次当前时间。如果系统崩溃或挂起,您可以一目了然地看到系统从上次显示的时间开始停止工作。在某些系统中,tty1用于表示控制台,上面的例子可以根据实际情况做相应的修改。为了提交刚刚创建的crontab文件,您可以将这个新创建的文件作为cron命令的参数传递$crontabdavecron现在文件已经提交给cron进程,该进程将每15分钟运行一次。同时在/var/spool/cron目录下已经复制了一份新建的文件,文件名为用户名(即dave)。使用-l参数列出crontab文件::>crontab-l0,15,30,4518-06***/bin/echo`date`>dev/tty1您可以使用此方法编辑$中的crontab文件HOME目录做一个备份::$crontab-l>$HOME/mycron这样,一旦不小心删除了crontab文件,可以用上一节介绍的方法快速恢复。如果你想在crontab文件中添加、删除或编辑条目,并且EDITOR环境变量设置为vi,那么你可以使用vi来编辑crontab文件。crontab-e可以像使用vi的任何其他文件一样修改crontab文件并退出。如果修改了某些条目或添加了新条目,cron将在保存文件时对文件执行必要的完整性检查。如果其中一个字段的值超出允许范围,它会提示您。当我们编辑crontab文件时,我们可能会添加新条目。例如,添加以下内容:#DT:删除核心文件,每月1、7、14、21、26、26日凌晨3点30分3031、7、14、21、26**/bin/find-名称'核心'-execrm{}\;最好在crontab文件的每一个条目上面都加上注释,这样你就可以知道它的功能,运行时间,更重要的是,它是哪个用户的定时作业。删除crontab文件crontab-r每隔1分钟执行一次cmd*****cmd在第3、15分钟每隔一小时执行一次****cmd在上午8点到11点的第3、15分钟执行一次执行3,158-11***cmd每两天上午8:00到11:00在第3、15分钟执行3,158-11*/2**cmd每周一上午8:00到11:00am每晚21:30在第3、15分钟执行3,158-11**1cmd重启smb3021***/etc/init.d/smbrestart4在1号、10号和1号每月22日:45Restartsmb4541,10,22**/etc/init.d/smbrestart每周六日1:10Restartsmb101**6,0/etc/init.d/smbrestart每天18:在00到23之间每30分钟重新启动smb0:00,3018-23***/etc/init.d/smbrestart每周六晚上11:0023**6/etc/init.d/smbrestart每小时重新启动smb0*/1***/etc/init.d/smbrestart在晚上11:00到早上7:00之间,每小时重新启动smb023-7***/etc/init.使用d/smbrestart的注意事项注意环境变量的问题有时候我们创建了一个crontab,但是这个任务并不能自动执行,但是手动执行这个任务是没有问题的。这种情况一般是crontab文件中没有配置环境变量造成的。的。在crontab文件中定义多个调度任务时,需要特别注意环境变量的设置,因为我们手动执行一个任务时,是在当前的shell环境下进行的。当然,程序可以找到环境变量,系统自动执行任务调度,此时不会加载环境变量。因此,需要在crontab文件中指定任务运行所需的所有环境变量。这样系统在执行任务调度的时候就没有问题了。不要假设cron知道它需要的特殊环境,它不知道。所以你一定要在你的shell脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以要注意以下三点:脚本中涉及到文件路径时写全局路径;当脚本执行需要使用java或其他环境变量时,通过source命令引入环境变量,如::catstart_cbp.sh#!/bin/shsource/etc/profileexportRUN_CONF=/home/rumenz/usr/local/temp/bin/run.sh-cmev&当手动执行脚本是可以的,但是crontab不执行,很可能是环境变量导致的,可以尝试在crontab中直接引入环境变量来解决问题。如::0****/etc/profile;/bin/sh/var/www/java/bin/restart_audit.sh注意清理系统用户的邮件日志每个任务调度执行后,系统会输出任务信息,通过邮件的形式发送给当前系统用户,所以随着时间的推移,日志信息会非常庞大??,可能会影响系统的正常运行。因此,重定向每个任务非常重要。比如可以在crontab文件中设置如下形式,忽略日志输出::0*/3***/usr/local/bin/apachectlrestart>/dev/null2>&1/dev/null2>&1表示先将标准输出重定向到/dev/null,再将标准错误重定向到标准输出。由于标准输出已经被重定向到/dev/null,标准错误也会被重定向到/dev/null,这样日志输出问题就解决了。系统级任务调度和用户级任务调度系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成一些用户自定义的任务。可以把用户级的任务调度放到系统级的任务调度中去完成(不推荐这样做),但是反过来是不行的。root用户的任务调度运行可以通过crontab–uroot–e设置,也可以直接将调度任务写入/etc/crontab文件。需要注意的是,如果要定义一个定时重启系统的任务,这个任务必须放在/etc/crontab文件中。甚至在root用户下创建定时重启系统的任务也是无效的。原文链接:https://rumenz.com/rumenbiji/...微信公众号:入门站