Linux | 定时任务

​ 有时候因为业务需要,服务白天不能停机,但是还需要更新服务,所以只能等到凌晨两点的时候去运行脚本,去更新服务。所以这个时候定时任务就有用处了,可以写一个脚本,在指定的时间段,启动或者停止某个服务,这就实现了简单的服务器自动化运维。

定时任务分为一次性定时任务 & 周期性定时任务:

  • 一次性定时任务:今天晚上的 2:30 执行 test.sh脚本。
  • 周期性定时任务:每天晚上的 2:30 都执行test.sh脚本。

一次性定时任务

顾名思意,一次性定时任务只执行一次,一般用于临时的工作需要。

格式:

  # 第一种方法
  at 时间
  > 输入要执行的内容。
  # 第二种方法
  要执行的命令 |  at 时间

以上两种方法都行

我经常用的还是第二种,因为只需要一行就可以搞定一个简单的一次性定时任务。

例如:

	echo "hello world" | at 14:25	

这种方法,可以以非交互式的方式创建一个Linux任务。

可以使用at -l命令查询创建的所有一次性定时任务:

image-20210716143238666

像上面一样,我一不小心,在 15:00 的时候,创建了两个任务,这时,我可以用:atrm 定时任务的序列号 删除任务。

image-20210716143435368

周期性定时任务

检查 crontab 服务是否安装

	rpm -qa | grep crontab

因为这个软件是系统默认自带的,所以大部分系统都会有这个应用。如果没有,请使用: yum -y install crontab 进行安装。

检查 crontab 服务是否开启

	/etc/init.d/crond start # 启动服务
	/etc/init.d/crond stop  # 关闭服务
	/etc/init.d/crond restart # 重启服务
	/etc/init.d/crond reload # 重新载入服务

加入开机启动:

chkconfig --level 35 crond on

crontab 配置文件

crontab 以分为全局和用户个人的配置文件,全说全局的配置文件:

全局配置

全局的配置文件全在 /etc/目录下面:

image-20210716145420612

配置文件跟据后缀名不一样,可以分为:每天,每周,每月,每小时

cron.d是系统自己的定时任务配置文件

cron.deny 是用于控制不让哪些用户使用的 crontabl 功能

crontab 配置文件是用户可以自定义定时任务的全局配置文件

我们着重看一下:crontab 文件:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
# 分 日 天 月  星期  命令

前面三行是服务定义的变量,注释下面才是我们添加定时任务的地方。

	* 号代表不做限制,比如说,如果分钟字段是 * 号,那么这个任务,每分钟都执行。
	, 逗号代表分隔时间段的意思,如果一天内,只有 3,5,7 这个时间段执行这个任务那么:3,5,7
	- 代码范围取值,当一个任务白天执行,晚上不执行的时候,可以这样写:[7-18]
	/ 代表时间的间隔频率,比如 `*/10 * * * * 命令` 就是每过10 分钟执行一次。

个人配置

每个用户都有一个自己的定时任务配置,并且这个配置不和全局配置冲突,这个文件的位置在:/var/spool/cron/ 下面。

image-20210716151159797

我们可以在这里修改自己的定时任务,也可以通过命令管理自己的定时任务:

	crontab -l # 查看定时任务
	crontab -e # 编辑定时任务

image-20210716151417737

image-20210716151443740

当使用 crontab -e 命令的时候,相当于编辑 /var/spool/cron/ 下面自己的定时任务文件一样。

系统会每分钟扫描一次这个文件,所以这个定时任务的生效时间是下一分钟。

例子

每天早上6点

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11点到早上8点之间每两个小时和早上八点

0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 command line

1月1日早上4点

0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/

每小时执行/etc/cron.hourly内的脚本

01 * * * * root run-parts /etc/cron.hourly

每天执行/etc/cron.daily内的脚本

02 4 * * * root run-parts /etc/cron.daily

每星期执行/etc/cron.weekly内的脚本

22 4 * * 0 root run-parts /etc/cron.weekly

每月去执行/etc/cron.monthly内的脚本

42 4 1 * * root run-parts /etc/cron.monthly

注意: “run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。

每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。

5,15,25,35,45,55 16,17,18 * * * command

每周一,三,五的下午3:00系统进入维护状态,重新启动系统。

00 15 * * 1,3,5 shutdown -r +5

每小时的10分,40分执行用户目录下的innd/bbslin这个指令:

10,40 * * * * innd/bbslink

每小时的1分执行用户目录下的bin/account这个指令:

1 * * * * bin/account

每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):

20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)

我的公众号


细节决定成败!
个人愚见,如有不对,恳请斧正!

版权声明:本文为FrostBoy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/FrostBoy/p/15020335.html