当前位置: 首页 > Linux

定时任务crontab

时间:2023-04-06 02:13:32 Linux

forLinux一、简介crond是Linux下的一个守护进程,用于周期性地执行某些任务或等待某些事件的处理。安装操作系统时,默认会安装此服务,并会自动启动crond进程。Croud每分钟会定时检查是否有任务要执行,有则自动执行任务。Linux下的任务调度分为两大类,系统任务调度和用户任务调度。系统任务调度系统周期性的请求执行任务,比如清理缓存。/etc/下有一个crontab文件,是系统任务调度的配置文件查看crontab文件:SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#详情参见man4crontabs#作业定义示例:#.----------------minute(0-59)#|.-------------小时(0-23)#||.------------月中的第几天(1-31)#|||.--------月(1-12)或一月、二月、三月、四月...#||||.----星期几(0-6)(星期日=0或7)或星期日、星期一、星期二、星期三、星期四、星期五、星期六#|||||#*****user-name要执行的命令第一行指定脚本使用的shell第二行PATH变量指定系统执行命令的路径第三行MAILTO变量指定crond任务执行信息会以邮件的形式发送给root用户,如果为空则不会发送给任何用户。第四行HOME变量指定执行命令或脚本时使用的主目录用户权限文件&描述:/etc/cron.deny:该文件中列出的用户不允许使用crontab命令/etc/cron。allow:允许该文件中列出的用户使用crontab命令/etc/spool/cron/:存放所有用户crontab文件的目录,以用户名命名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,如果用在分钟字段,表示每十分钟执行一次。2、crond服务安装crontab:yuminstallcrontabs服务操作说明:/sbin/servicecrondstart//启动服务/sbin/servicecrondstop//关闭服务/sbin/servicecrondrestart//重启服务/sbin/servicecrondreload//重新加载配置,查看crontab服务状态:servicecrondstatus手动启动crontab服务:servicecrondstart查看crontab服务是否设置开机自启动,执行命令:ntsysvaddedtostartautomaticallyboot:chkconfig–level35crondoncron脚本文件目录:/var/spool/croncron日志目录/var/log/cron三、crontab命令详解1、命令格式:crontab[-uuser]filecrontab-uuser2。命令功能:通过crontab命令,我们可以定时执行指定的系统命令或shell脚本。时间间隔的单位可以是分钟、小时、天、月、周以及以上任意组合。该命令非常适合定期进行日志分析或数据备份。3、命令参数:-uuser:用于设置某个用户的crontab服务,例如“-uixdba”表示设置ixdba用户的crontab服务,该参数一般由root用户运行。-file:file是命令文件的名字,意思是把file作为crontab的任务列表文件,加载到crontab中。如果这个文件没有在命令行上指定,crontab命令将接受在标准输入(键盘)上键入的命令并将它们加载到crontab中。-e:编辑用户的crontab文件的内容。如果没有指定用户,则表示编辑当前用户的crontab文件。-l:显示用户的crontab文件的内容。如果没有指定用户,则表示显示当前用户的crontab文件的内容。-r:从/var/spool/cron目录中删除用户的crontab文件。如果不指定用户,则默认删除当前用户的crontab文件。-i:删除用户的crontab文件时给出确认提示。四、常用方法1、新建一个crontab文件,设置一个名为cron的文件。这里设置为roottab(目录在/var/spool/cron下)填充定时任务,例如:1****wget-Shttp://www.log.com/log-O--q2>$1/dev/nullwq保存退出,然后将文件提交给cron进程crontabroottab每1分钟调用一次这个请求,请求后面是记录的日志2.列出crontab文件$crontab-l1****wget-Shttp://yb.liduoduo.me/te/cron-O--q2>&1/dev/null3.编辑crontab文件$crontab-e您可以修改crontab文件并像任何其他文件一样退出六.如果修改了某些条目或添加了新条目,则cron将在保存文件时对文件执行必要的完整性检查。如果其中一个字段的值超出允许范围,它会提示您。四、删除crontab文件$crontab-r四、使用注意事项1、注意环境变量问题有时候我们创建了一个crontab,但是这个任务不能自动执行,但是手动执行这个任务是没有问题的。是crontab文件中没有配置环境变量造成的。在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行一个任务时,是在当前的shell环境下进行的。当然,程序是可以找到环境变量的,系统在自动执行任务调度的时候,是不会加载环境变量的。因此需要在crontab文件中指定任务运行所需的所有环境变量。这样系统在执行任务调度的时候就没有问题了。不要假设cron知道它需要的特殊环境,它不知道。所以你一定要在你的shell脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以要注意以下三点:1)脚本中涉及到文件路径时写全局路径;2)当脚本执行需要使用java或其他环境变量时,通过source命令导入环境变量,如:catstart_cbp.sh\#!/bin/shsource/etc/profileexportRUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf/usr/local/jboss-4.0.5/bin/run.sh-cmev&3)手动执行脚本时OK,但是当crontab没有执行时live或alive。这时候你要大胆怀疑是环境变量惹的祸,可以尝试在crontab中直接引入环境变量来解决问题。如:0****./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh2。注意清理系统用户的邮件日志。每个任务被调度执行后,系统会将输出信息以邮件的形式发送给当前系统用户,所以随着时间的推移,日志信息会非常庞大??,可能会影响系统的正常运行。因此,重定向每个任务非常重要。例如,可以在crontab文件中设置如下形式忽略日志输出:0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1"/dev/null2>&1"表示先将标准输出重定向到/dev/null,再将标准错误重定向到标准输出。由于标准输出已经被重定向到/dev/null,所以标准错误也会被重定向到/dev/null,所以日志输出问题就是这样了。3、系统级任务调度和用户级任务调度系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成一些用户自定义的任务,可以通过把用户级任务调度变成系统级任务调度(不建议这样做),但反过来是不行的。root用户的任务调度操作可以通过“crontab–uroot–e”来设置,也可以直接将调度任务写入/etc/crontab文件中。需要注意的是,如果要定义一个定时重启系统的任务,必须把这个任务放在/etc/crontab文件中,即使你在root用户下创建一个定时重启系统的任务,也是无效的。4.其他注意事项新建的cron作业不会立即执行,至少需要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'。