Debian 11使用crontab创建定时任务

crontab是Linux下用来定期执行程序的命令,最小的执行时间是一分钟。

当安装完成操作系统之后,默认便会启动此任务调度命令。

一 cron定时任务表达式

1、cron定时任务表达式说明

顺序分钟小时日期月份星期
取值范围0-590-231-30/311-120-7
1
2
3
4
5
6
7
8
*    *    *    *    *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0或7)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

2、特殊符号说明

1
2
3
4
*:代表所有可能的值  例如分钟的值为"*"表示每分钟
-:指定范围 例如在分钟里,"2-5"表示"2,3,4,5"
,:列出枚举 例如在分钟里,"5,15"表示5分钟和15分钟触发
/:指定增量 例如在分钟里,"3/15"表示从3分钟开始,每隔15分钟执行一次

3、表达式示例

1
2
3
4
0/2 * * * 表示每2分钟 执行任务
0 2 1 * * 表示在每月的1日的凌晨2点执行任务
0 0 1,15 * * fsck /home 表示每月1号和15号检查/home 磁盘
0 1 * * 1-5 sh /root/temp.sh 表示每周一至周五1点钟执行脚本 "/root/temp.sh"

二 crontab创建定时任务

1、crontab常用命令参数

语法:

crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

参数说明:

  • -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
  • -e 执行文字编辑器来设定时程表
  • -l 列出目前的时程表
  • -r 删除目前的时程表(慎用)

2、创建定时任务

任务调度分为两类,系统任务调度和用户任务调度。除了可以使用上面命令,也可以直接编辑crontab配置文件来创建定时任务

  • 系统任务调度配置文件地址 "/etc/crontab"
  • 用户任务调度配置文件 Debian11: "/var/spool/cron/crontabs/root" (root用户的)

3、crontab服务操作

1
2
3
4
5
6
7
service cron start #启动服务

service cron stop #关闭服务

service cron restart #重启服务

service cron reload #重新载入配置

4、实现按秒间隔执行

按秒执行的任务推荐使用脚本来实现 例:twosecondrun.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash  

step=2 #间隔的秒数,不能大于60

for (( i = 0; i < 60; i=(i+step) )); do
echo `date`
sleep $step
done

exit 0

crontab 配置:

1
* * * * * sh /home/twosecondrun.sh

注意

  • 1、当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
1
* * * * * sh /home/twosecondrun.sh > /dev/null 2>&1 
  • 如果遇到脚本被按时调用了,脚本内容没有正常执行,手动直接用命令(sh或./)可以正常执行,这主要是因为无法读取环境变量的原因。解决办法:在脚本中增加设置环境变量PATH
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

step=2 #间隔的秒数,不能大于60

for (( i = 0; i < 60; i=(i+step) )); do
echo `date`
sleep $step
done

exit 0