Linux-定期执行程序_crond与crontab

发布时间 2023-04-15 23:22:45作者: ꧁执笔小白꧂

1 、Crond简介:

  (1)概念:

    Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件。

  (2)命令:

    status   //查看此服务的运行状态
    stop     //停止此服务
    restart  //重启此服务
    reload   //重新载入配置

    /sbin/service crond start    #启动服务
    /sbin/service crond stop     #关闭服务
    /sbin/service crond restart  #重启服务
    /sbin/service crond reload   #重新载入配置

2、crontab简介:

  (1)概念:

    crontab是一个命令,该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。而crond正是它的守护进程。

  (2)命令:

  crontab -u   # 设定用户的cron服务 
  crontab -e   # 修改 crontab 文件. 如果文件不存在会自动创建(或者通过修改/etc/crontab文件)
  crontab -l   # 查看用户的 crontab 文件
  crontab -r   # 删除用户的crontab 文件 
  crontab -ir  # 删除 crontab 文件前提醒用户。
  crontab -h   # 查看一些参数信息

  (3)参数信息:

    间间隔的单位可以是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)。

  拓展:

/etc/cron.deny(拒绝) 该文件中所列用户不允许使用crontab
/etc/cron.allow(允许) 该文件优先级高于cron.deny(默认不存在,一般不用)
/var/spool/cron/ 所有用户crontab配置文件默认都存在此目录,文件名以用户名命名

  a)cmd为要执行的命令或脚本,例如:/bin/sh /server/scripts/chensiqi.sh

  b)每个列之间必须要有一个空格

  时间记忆口诀:分时日月周

  crontab 语法格式中特殊符号含义如下表

特殊符号 含义
* 代表取值范围内的数字
/ ① 代表”每”例如:每10分钟执行一次;② 任务可以写成*/10 * * * * cmd,

-

① 代表分隔符,表示一个时间范围;② 例如:每天的17,18,19点的00分执行任务。00 17-19 * * * cmd
① 表示分隔时段的意思;② 例如每天的5点10点00分执行任务,00 5,10 * * * cmd

3、crond的概念和crontab是不可分割的

  例如:每五分钟做一次服务器时间同步。要执行crontab这个命令,也需要启动一个服务crond才行。

4、安装crond

  apt-get install cron

5、添加sheel脚本

  (1)首先创建一个执行程序:vim a.sh

  (2)编辑: #!/bin/bash

       python3  python.py >> test2.log 2>&1

  (3)添加权限:chmod +x ./a.sh

  (4)查看执行结果:./a.sh

6、例子:14个超实用的Crontab使用实例

  (1)每天 02:00 执行任务

  0 2 * * * /bin/sh backup.sh

  (2)每天 5:00和17:00执行任务

  0 5,17 * * * /scripts/script.sh

  (3)每分钟执行一次任务

  * * * * * /scripts/script.sh

  (4)每周日 17:00 执行任务

  0 17 * * sun /scripts/script.sh

  (5)每 10min 执行一次任务

  */10 * * * * /scripts/monitor.sh

  (6)在特定的某几个月执行任务

  * * * jan,may,aug * /script/script.sh

  (7)在特定的某几天执行任务

  0 17 * * sun,fri /script/scripy.sh #在每周五、周日的17点执行任务

  (8)在某个月的第一个周日执行任务

  0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh

  (9)每四个小时执行一个任务

  0 */4 * * * /scripts/script.sh

  (10)每周一、周日执行任务

  0 4,17 * * sun,mon /scripts/script.sh

  (11)每个30秒执行一次任务

    我们没有办法直接通过上诉类似的例子去执行,因为最小的是1min。但是我们可以通过如下的方法。

    * * * * * /scripts/script.sh 

    * * * * * sleep 30; /scripts/script.sh

  (12)多个任务在一条命令中配置

  * * * * * /scripts/script.sh; /scripts/scrit2.sh

  (13)每年执行一次任务

  @yearly /scripts/script.sh

    注:@yearly 类似于“0 0 1 1 *”。它会在每年的第一分钟内执行,通常我们可以用这个发送新年的问候。

  (14)系统重启时执行

  @reboot /scripts/script.sh