当前位置: 首页 > Linux

Linux命令之crontab——定时任务

时间:2023-04-06 19:34:15 Linux

crontab命令用于提交和管理用户需要周期性执行的任务。类似于Windows下的定时任务。安装操作系统时,默认安装该服务工具。并且会自动启动crond进程,crond进程每分钟会定时检查是否有任务要执行,如果有任务就会自动执行任务。crontab文件的含义:在用户创建的crontab文件中,每一行代表一个任务,每一行中的每个字段代表一个设置。它的格式分为六个字段,前五个部分是时间设置部分,第六段是要执行的命令段,格式如下:minutehourdaymonthweek命令顺序:分时daymonthweekminute:表示分钟,可以是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,如果用在分钟字段,表示每十分钟执行一次。图解【图片来自网络】:常用的crontab命令:安装crontab:yuminstall`crontabs`查看定时任务列表:crontab-l编辑定时任务:crontab–e【相当于:`vim``/var/spool/cron/root`]**删除**定时任务:`crontab``–r`**备份**定时任务:`crontab``-l>$HOME/backMyCrontab`crontab服务运行说明:servicecrondstart//启动服务servicecrondstop//关闭服务servicecrondrestart//重启服务servicecrondreload//重新加载配置服务crondstatus//查看crontab服务状态推荐一个计算crontab命令执行时间的网站:https:///tool.lu/crontab/例子:每2分钟输出一次当前时间到文件*/2****echo$(date)>>/test/date.log每周一凌晨4点备份crontab到指定目录以当前日期命名File04**1crontab-l>/backup/backMyCrontab/backMyCrontab-$(date+%Y-%m-%d).log12个月内,每天早上6点到12点,every3每隔一小时0分执行/usr/bin/backup06-12/3*12*/usr/bin/backup会在每天3-5,17-20每30分钟同步一次上网时间,不会将日志输出到crontab输出到logecho"*/30[3-5],[17-20]***/usr/bin/ntpstattime.windows.com>/dev/null2>&1">>/var/cron.log执行command3,158-11*/2**命令每周一早上8:00到11:00每两天早上8:00到11:003号和15分钟每周六日1点10分执行command3,158-11**1命令每周六日1点10分1**6,0/etc/init.d/smb每周一到周五3点重启,在/home目录下,找到名为*.xxx的文件,将文件0003**1-54天前删除。找到/home"*.xxx"-mtime+4-execrm{}\;每小时执行/etc/cron.hourly目录下的脚本01****rootrun-parts/etc/cron.hourlycrontab使用总结:1.环境变量问题,例如crontab无法识别Java环境变量知识扩展:查看crontab的日志记录:1、在linux中可以看到文件/var/log/cron.log,可以用tail-f/var/log/cron.log来观察。或者在less/var/log/cron中输入G(大写),直接到最后查看最新的日志信息。2、mail任务在/var/spool/mail/root文件中,有crontab执行日志记录。使用tail-f/var/spool/mail/root查看最新的crontab执行情况。系统任务调度:系统需要周期性执行的工作,比如将缓存数据写入硬盘,清理日志等。在/etc目录下有一个crontab文件,它是系统任务调度的配置文件。/etc/crontab文件包括以下几行:SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=""HOME=/第一行SHELL变量指定系统要useWhichshell,这里是bash,第二行PATH变量指定系统执行命令的路径,第三行MAILTO变量指定crond的任务执行信息将通过邮件发送给root用户。如果MAILTO变量的值为空,则表示没有向用户发送任务执行信息,第四行的HOME变量指定执行命令或脚本时使用的主目录。用户任务调度:用户需要定时执行的任务,如用户数据备份、定时邮件提醒等。用户可以使用crontab工具自定义自己的定时任务。所有用户定义的crontab文件都存储在/var/spool/cron目录中。文件名与用户名一致,用户权限文件如下:/etc/cron.deny该文件所列用户不允许使用crontab命令/etc/cron.allow该文件所列用户允许使用crontab命令的文件/var/spool/cron/存放所有用户crontab文件的目录,以用户名命名使用注意事项:注意环境变量的问题有时候我们会创建一个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死活的时候不执行。这时候你要大胆怀疑是环境变量惹的祸,可以尝试在crontab中直接引入环境变量来解决问题。如:0****./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh注意清理系统用户的邮件日志(命令:rm-f/val/mail/root)每个任务调度执行后,系统会将任务输出信息以邮件的形式发送给当前系统用户,这样随着时间的推移日志信息会非常大,可能会影响正常系统的运作。定向处理非常重要。例如,可以在crontab文件中设置如下形式忽略日志输出:0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1"/dev/null2>&1"表示先将标准输出重定向到/dev/null,再将标准错误重定向到标准输出。由于标准输出已经被重定向到/dev/null,所以标准错误也会被重定向到/dev/null,所以日志输出问题就是这样了。系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成一些用户自定义的任务。可以把用户级的任务调度放到系统级的任务调度中去完成(不推荐),但是反过来不行,root用户的任务调度操作可以通过“crontab-uroot-e”来设置,或者调度任务可以直接写入/etc/crontab文件。需要注意的是,如果你想定义一个定时重启系统的任务,你必须把这个任务放在/etc/crontab文件中。甚至在root用户下创建定时重启系统的任务也是无效的。其他注意事项新建的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'。参考文章:http://man.linuxde.net/Crontabhttps://www.cnblogs.com/ftl10...https://www.cnblogs.com/intva...