crontab的使用方法介绍

crontab:定时任务的守护进程,精确到分。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。

在/etc/crontab文件,这个就是系统任务调度的配置文件。

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。

用户可以使用 crontab 工具来定制自己的计划任务。在crontab 文件都被保存在/var/spool/cron目录中。其文件名与用户名一致

系统任务调度仅仅适用于root用户

cat /etc/crontab

crontab的使用方法介绍_第1张图片

前四行是用来配置crond任务运行的环境变量

第一行SHELL变量指定了系统要使用哪个shell,这里是bash

第二行PATH变量指定了系统执行命令的路径

第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户

如果MAILTO变量的值为空,则表示不发送任务执行信息给用户

第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

crontab 时间表示
项目 含义 范围
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日)

 

时间特殊符号
特殊符号 含义
*(星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线) 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。

小 结:
    数字的表示最好用2为阿拉伯数字显示
    周和日最好不要同时用
    定时任务要加注解
    可以定向到日志文件或者空文件
    定时任务一定是绝对路径,且目录必须存在才能出结果
    crontab 服务一定要开启运行

用户任务调度

crontab 命令常用选项及功能
选项 功能
-u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo
用户的 crontab 服务,此选项一般有 root 用户来运行。
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r  从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 
-i 在删除用户的 crontab 文件时,给确认提示。
crontab举例
时间 含义
45 22 ***命令 在 22 点 45 分执行命令
0 17 ** 1命令 在每周一的 17 点 0 分执行命令
0 5 1,15**命令 在每月 1 日和 15 日的凌晨 5 点 0 分执行命令
40 4 ** 1-5命令 在每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 ***命令 在每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1命令 在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆

在书写 crontab 定时任务时,需要注意以下几个事项:

  • 6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。
  • crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。
  • 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。
  • 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

crontab的注意事项

1. 注意环境变量问题

在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置

1

2

3

4

5

6

7

8

9

10

# 脚本中涉及文件路径时写全局路径;

# 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh -c mev &

 

# 当手动执行脚本OK,但是crontab死活不执行时。可以尝试在crontab中直接引入环境变量解决问题。

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2. 系统级任务调度与用户级任务调度

1

root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

3.其他注意事项

1

2

3

crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron

千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’

4. 生产调试定时任务

1

2

3

4

1.增加执行任务的频率调试

2.调整系统时间调试任务,提前5分钟   -->不用于生产环境

3.通过脚本日志输出调试定时 任务

4.注意一些任务命令带来的问题        -->确保命令的正确性

5.crontab箴言

1

2

3

4

5

6

7

8

9

10

11

1.环境变量问题,例如crontab不能识别Java的环境变量

    crontab执行shell时,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行。

2.命令的执行最好用脚本

3.脚本权限加/bin/sh,规范路径/server/scripts

4.时间变量用反斜线转义,最好用脚本

5.定时任务添加注释

6.>/dev/null 2>&1   ==>&>/dev/null,别随意打印日志文件

7.定时任务里面的程序脚本尽量用全路径

8.避免不必要的程序以及命令输出

9.定时任务之前添加注释

10.打包到文件目录的上一级

 

参考地址:博客

C语言中文网:http://c.biancheng.net/

小a玖拾柒:https://www.cnblogs.com/ftl1012/

你可能感兴趣的:(Linux)