• 在Linux中使用crontab


    背景

    虽然不是专业运维,但是在嵌入式开发中还是需要懂一点的。部门内部搞服务器最厉害的就是我了,汗。

    参考:

    介绍

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

    安装

    ubuntu安装cron:(需要有对应的root权限)

    # 安装
    apt-get install cron
    # 启动
    service cron start
    # 重启
    service cron restart
    # 停止
    service cron stop
    # 检查状态
    service cron status
    # 查询cron可用的命令
    service cron
    # 检查Cronta工具是否安装
    crontab -l
    

    使用

    启动Cron服务

    service cron start
    

    使用Cron帮助

    如果cron工作正常,那么你可以使用man命令查看其手册描述的详细用法。(退出按下q键或h键)

    man crontab
    

    列出Cron作业

    使用以下命令列出当前用户计划的cron作业。

    crontab -l
    
    no crontab for xxx
    

    如果想查看其它用户的cron作业,可以使用如下命令(这会列出指定用户的cron作业):

    crontab -l -u username
    

    编辑Cron作业

    第一次进入的时候要选择编辑器,选择后你可以配置新cron作业了,一般是选3

    crontab -e
    
    no crontab for xxx - using an empty one
    
    Select an editor.  To change later, run 'select-editor'.
      1. /bin/ed
      2. /bin/nano        <---- easiest
      3. /usr/bin/vim.basic
      4. /usr/bin/vim.tiny
    
    Choose 1-4 [2]: 3
    

    如何定时执行任务,在后面详细讲。

    移除Cron作业

    使用下面的命令移除已经计划的cron作业

    crontab -r
    

    使用下面的命令移除所有已计划的cron作业,且无需再次确认。

    crontab -ir
    

    • -u user:用来设定某个用户的crontab服务;
    • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
    • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
    • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
    • -i:在删除用户的crontab文件时给确认提示。

    Cron表达式

    使用crontab -e可以编辑定时任务,这里讲述如何配置。

    Cron表达式是一个字符串,字符串以空格隔开,分为5或6个域,每一个域代表一个含义,系统支持的表达式格式如下(DayofWeek 为可选域。):

    Seconds Minutes Hours DayofMonth Month [DayofWeek]
    
    取值
    Seconds: 可为"`* / , -"四个字符,有效范围为0-59的整数
    Minutes: 可为"* / , -"四个字符,有效范围为0-59的整数
    Hours: 可为"* / , -"四个字符,有效范围为0-23的整数
    DayofMonth: 可为"* / , - ?"五个字符,有效范围为0-31的整数
    Month: 可为", - * /"四个字符,有效范围为1-12的整数或JAN-DEC
    DayofWeek: 可为"* / , - ?"五个字符,有效范围为0-6的整数或SUN-SAT两个范围。0表示星期天,1表示星期一, 依次类推

    字符值

    针对上面提到的字符,解释如下:

    特殊字符 意义
    * 表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。
    ? 字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值,当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”。
    - 表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次。
    / 表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次。
    , 表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。

    例子

    常见的定时时间:

    0 0 10,14,16 * * ? 每天上午10点,下午2点,4点触发 
    0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时触发  
    0 0 12 ? * WED 表示每个星期三中午12点触发  
    0 0 12 * * ? 每天中午12点触发 
    0 15 10 ? * * 每天上午10:15触发 
    0 15 10 * * ? 每天上午10:15触发 
    0 15 10 * * ? * 每天上午10:15触发 
    0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发 
    0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发 
    0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
    0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 
    0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 
    0 15 10 ? * MON-FRI 周一至周五的上午10:15触发 
    0 15 10 15 * ? 每月15日上午10:15触发 
    0 15 10 L * ? 每月最后一日的上午10:15触发
    

    我所需要的:

    0 0 4 * * ? /bin/sh /home/xxx/sync.sh >> /home/xxx/sysnc.log
    

    注:如果执行看到log中出现了:“Syntax error: “(” unexpected”

    代码对于标准bash而言没有错,因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash。

    输入下面的命令配置一下;

    sudo dpkg-reconfigure dash
    
    选No
    

    总结

    1)新创建的cron作业,不会马上执行,至少要过2分钟才执行。如果重启cron服务则会马上执行。

    2)Cron是Unix系统的一个配置定期任务的工具,用于定期或者以一定的时间间隔执行一些命令或者脚本;可执行的任务范围可以是每天夜里自动备份用户的home文件夹,也可以每个小时记录CPU的信息日志。

    crond位于/etc/rc.d/init.d/crond/etc/init.d/etc/rc.d /rc5.d/S90crond,最常用/var/lock/subsys/crond

    3)crontab(cron table)命令用于编辑执行中的定期任务列表,并且操作是基于每个用户的,每一个用户(包括root用户)都拥有自己的crontab。

    crontab位于/usr/bin/crontab

    4)crond守护进程是在系统启动时由init进程启动的,受init进程的监视,如果它不存在了,会被init进程重新启动。这个守护进程每分钟唤醒一次,并通过检查crontab文件判断需要做什么。

    每个用户有一个以用户名命名的crontab文件,存放在/var/spool/cron/crontabs目录里。若管理员允许或者禁止其他用户拥有crontab文件,则应编辑/etc/下面的cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。每一个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。

    附录:centOS安装Ubuntu

    1)vixie-cron 软件包是 cron 的主程序;

    2)crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

    yum install vixie-cron
    yum install crontabs
    

    配置:

    service crond start     # 启动服务
    service crond stop      # 关闭服务
    service crond restart   # 重启服务
    service crond reload    # 重新载入配置
    service crond status    # 查看crontab服务状态
    

    在CentOS系统中加入开机自动启动:

    chkconfig --level 345 crond on
    
    如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
    若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
    博客地址:https://www.cnblogs.com/schips/
  • 相关阅读:
    移动端开发touchstart,touchmove,touchend事件详解和项目
    我对JVM的理解
    快速排序
    归并排序(Merge sort)
    希尔排序
    插入排序
    选择排序
    冒泡排序(Bubble Sort)
    java设计模式之单例模式
    Java中反射机制的理解
  • 原文地址:https://www.cnblogs.com/schips/p/using_crontab_in_linux.html
Copyright © 2020-2023  润新知