Linux定时任务详解

crontab 定时任务

  • 作用:固定时间同步;数据备份(通常先打包再备份,降低占用磁盘io);日志切割;监控取值;定时执行脚本;辅助程序运行……

  • 定时任务配置文件详解

[root@Dezyan ~]# vim /etc/crontab
*     *     *   *    *    执行的用户    可执行的文件或命令
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- 周	0到7之间的数字,表示星期几(0或7代表星期日)
|     |     |   +-------月	 1到12之间的数字,表示月份。
|     |     +---------日 	1到31之间的数字,表示日期。
|     +----------- 时	0到23之间的数字,表示小时。
+------------- 分	0到59之间的数字,表示分钟。
----------------------------------------------------------------------
特殊字符
	*	#表示“每”的意思;匹配任何值,例如 */5 表示每5分钟;五颗*表示每分钟都要执行一次定时任务;
	-	#表示区间范围,例如 1-3 表示1点到3点。
	,	#表示间隔,例如 1,3,4-10 表示1点、3点和4点到10点。
	/	#表示起始时间开始,每隔一定时间执行一次,例如 0/15 表示从0分钟开始,每15分钟执行一次。
		#									  */15 表示每过15分钟执行一次
	L	#表示月份或日期的最后一个数字,例如 6L 表示6月的最后一天。
	W	#表示有效工作日(周一到周五),如果与日期一起使用,表示离指定日期最近的一个工作日。
	#	#表示星期中的第几个周,例如 4#3 表示一个月中的第三个星期四。
------------------------------------------------------------------------
在可执行的文件或命令中需要使用\转义的字符
	空格: (空格需要转义,因为cron会将空格视为参数分隔符)
	星号:*(星号在cron中用于匹配多个值,如*/5表示每5分钟)
	问号:?(问号在cron中用于匹配单个字符)
	井号:#(井号在cron中用于注释)
	百分号:%(百分号在cron中用于换行)
	反斜杠:\(反斜杠用于转义其他特殊字符)
  • 任务示例

1.使用*/特殊符号和不使用的区别;

使用:
	#让系统<每5分钟>执行一次dezyan.sh脚本
		*/5 * * * * root dezyan.sh
	#让系统<每分钟>执行一次dezyan.sh脚本
		* * * * * root dezyan.sh
	#让系统<每5小时>执行一次dezyan.sh脚本
		* */5 * * * root dezyan.sh
------------------------------------------------------
不使用:
	#让系统<每小时的第5分钟>执行一次dezyan.sh脚本
		05 * * * *  root dezyan.sh
	#让系统<每天凌晨12点>执行一次dezyan.sh脚本
		00 00 * * *   root dezyan.sh

2.使用-,特殊符号与*.结合使用和与数字结合使用的区别;

与`*.`结合:
	#让系统<在7-11点之间的每分钟>都执行一次dezyan.sh脚本
		* 7-11 * * *   root dezyan.sh
	#让系统<在7-11点之间的每20分钟>都执行一次dezyan.sh脚本
		*/20 7-11 * * *   root dezyan.sh
	#让系统<在7-11点之间和13-16点之间的每分钟>都执行一次dezyan.sh脚本
		* 7-11,13-16 * * * root dezyan.sh
----------------------------------------------------------------
与`数字`结合:
	#让系统<在7-11点之间的每个整点>执行一次dezyan.sh脚本
		00 7-11 * * * root dezyan.sh
	#让系统<在7-11点之间和13-16点之间的每个整点>执行一次dezyan.sh脚本
		00 7-11,13-16 * * * root dezyan.sh

3.一些需要使用\转义符来确保文件语法正确的例子

#每分钟打包/etc/hosts /etc/passwd 名称为 时间+etc.tar.gz 放到/opt目录
* * * * * root tar zcvf /opt/`date +\%F-\%H-\%M`_etc.tar.gz /etc/hosts /etc/passwd

4.需要重新配置PATH变量的任务

#在用户配置文件中每5分钟执行一次时间同步
PATH=/app/tools/cmd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
* * * * * ntpdate ntp2.aliyun.com &>>/root/cron.log
  • 系统和用户定时任务的使用区别
系统用户(以root为例)
文件位置/etc/crontab/var/spool/cron/root
语法结构执行用户不能省略无需添加执行用户
配置方式vim /etc/crontabvim /var/spool/cron/root(无语法检查)
crontab -e(有语法检查)
查看方式cat /etc/crontabcat /var/spool/cron/root
crontab -l
  • 定时任务的日志文件
centos和kylin: /var/log/cron
ubuntu:        /var/log/syslog
  • 一些注意点
1.在书写执行命令时,如果将命令的结果保存到一个不存在的,没有指定位置文件中,系统会默认在家目录中创建;
	如:*/5 * * * * root echo dezyan >> dezyan.txt
	会在家目录生成dezyan.txt
2.配置用户定时任务文件时:
	配置文件放在/var/spool/cron/目录中;
	当一个用户没有配置定时任务文件时,配置文件时默认没有的;
3.配置用户定时任务文件时:
	默认识别的PATH变量只有/usr/bin和/bin路径
		导致某些命令不被识别
	需要再配置文件开头需要重新配置PATH变量
	PATH=/app/tools/cmd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
4.可以自定义是否保留任务结果到文件中(可以排查问题)
	保留:
		命令后接 &>>文件 即可
	不保留:
		命令后接 &>/dev/null 即可
5.使用centos,如果关闭了邮件服务(systemctl stop postfix)
	每执行一次定时任务
	会在`/var/spool/postfix/maildrop/`中自动生成一个小文件,小文件会占用inode号码
	一定要及时清理,或将定时任务执行的结果定向到文件或者空。
6.避免一些不必要的输出 类似tar -zcf 去掉v 类似打包进入相对路径
7.多条命令使用脚本为佳
  • 练习

以每天为时间+ip地址+主机名称在/opt/创建目录 如:mkdir /opt/2024-11-19_oldboyedu_10.0.0.200

打包/etc/passwd /etc/hosts文件名称为etc.tar.gz 放到已经创建好的目录中

查找/opt/目录下所有7天前被修改过的文件删除 (模拟环境使用循环生成需要的文件)

1.编写脚本文件
[root@Dezyan ~/shellScripts]# vim TimeIpHostname.sh
time=`date +%F-%H-%M`
ip=`ip add show ens33 | sed -rn '3s#.*et (.*)/24 .*$#\1#gp'`
hostname=`hostname`
ALL="${time}_${ip}_${hostname}"

mkdir -p  "/opt/$ALL"
tar zcf  "/opt/$ALL/etc.tar.gz" /etc/passwd /etc/hosts
find /opt/*  -mtime +7 | xargs rm 

2.为脚本添加执行权限
[root@Dezyan ~/shellScripts]# chmod +x /root/shellScripts/TimeIpHostname.sh

3.编写/etc/crontab文件
[root@Dezyan ~/shellScripts]# vim /etc/crontab
00 00 * * *   root  /root/shellScripts/TimeIpHostname.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值