Linux学习|Gentoo/Arch/FreeBSD

Linux crontab定时任务详细分解

2020-08-31  本文已影响0人  刘小白DOER

    crontab命令是cron table的简写,是cron的配置文件,完成定时任务。cron执行时,需要读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件。本文详细分解所有的cron配置文件,阐述区别并运用。

    1、/etc/crontab全局定时任务

        当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab,负责调度各种管理和维护任务。按照解释内容,/etc/crontab是system-wide crontab,完成全局配置。

    我们先来看一个命令,run-parts命令,位于/bin/run-parts,内容是很简单的一个shell脚本,就是遍历目标文件夹,执行第一层目录下的可执行权限的文件。crontab脚本就是执行4个目录下的可执行权限的文件,/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly,分为每小时定时任务、每天定时任务、每周定时任务、每月定时任务。那么前面的test命令呢?crontab适合7x24小时运行的服务器,anacron适合非7x24小时运行的服务器,以天为单位或者是在启动后立刻进行 anacron 的动作,侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了。

    test -x /usr/sbin/anacron表示 “检测文件/usr/sbin/anacron是否存在且具有“可执行”权限”。  若test -x /usr/sbin/anacron为 true,则不执行||后面的命令,若为 false,则执行||后面的命令。

    2、/var/spool/cron/crontabs用户定时任务    

         目录下存放的是用户包括root的crontab任务,每个任务以创建者的名字命名。笔者用crontab -e进入当前用户pi的工作表编辑,编辑器选择nano。笔者有两个定时任务,每天凌晨4点执行数据库备份,每周一零点重启树莓派(重启并输出日志到log文件)。修改crontab后,会显示crontab: installing new crontab 。

        /var/spool/cron/crontabs这个文件里面的具体用户命名的定时任务,cd进去是显示权限不够,crontabs这个目录属主是root,权限是drwx-wx--T,T代表粘滞位(sticky bit),使一个目录既能够让任何用户写入文档,又不让用户删除这个目录下他人的文档。

        pi用户下需要root才能进入这个目录。sudo -s可以加载root权限进入crontabs目录。当然修改用户crontab,只需要crontab -e就行了。

3、/etc/cron.d/  全局其他任务

        当要增加全局性的计划任务时,一种方式是直接修改/etc/crontab,但是只是里面是配置每小时定时任务、每天定时任务、每周定时任务、每月定时任务四个任务的,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的。

        笔者的目录里面是关于php的脚本,每个小时的09,39分钟执行一次php脚本。

4、/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly   遍历目标执行定时任务

        这四个目录定义的是每小时定时任务、每天定时任务、每周定时任务、每月定时任务,我们选择/etc/cron.daily目录下的apache2脚本,注意到这个脚本与其他定时任务脚本的区别了吗?

        没有时间定义哦!!!那在哪个时间点,怎么执行呢。请看/etc/crontab全局定时任务脚本的内容,里面已经定义好了,在这个目录下只需要放入脚本就行了,多方便。

        那么问题就来了,我修改定时任务的执行时间,那么目录下的所有脚本不是都要修改了吗。答案是的,解决方法有两个,如果这个时间点任务多的话,可以重新建立目录,编写脚本,在其他时间点执行。如果只有一个任务的话,/etc/cron.d/ 全局其他任务可能更加方便。

5、定时任务格式

        时间格式

        m h dom mon dow command

        分钟、小时、天、月、周、命令。

        看看英文定义吧,阅读脚本开头定义十分重要!

         To define the time you can provide concrete values for minute (m), hour (h), day of month (dom), month (mon),and day of week (dow) or use '*' in these fields (for 'any')。

上一篇下一篇

猜你喜欢

热点阅读