定时任务

定时任务

1.crond

	crond是定期执行程序的命令,也是定时任务的守护进程

2.定时任务的作用

1.系统级别的定时任务:
	1.1 临时文件清理
	1.2 系统信息采集
	1.3 日志文件切割
2.用户级别的定时任务:
	2.1 定时向互联网同步时间
	2.2 定时备份系统配置文件
	2.3 定时备份数据库的数据

3.定时任务的语法

0 ✓ 14:35:31 root@ji,10.0.0.176:~ # vim /etc/crontab
	# 定时任务支持bash命令
        SHELL=/bin/bash
        # 定时任务以下目录下的命令(写在定时任务中的命令最好用绝对路径)
        PATH=/sbin:/bin:/usr/sbin:/usr/bin
        # 定时任务执行的内容,如果有输出内容,会通过邮件发送到root用户
        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:星期(0和7为星期天)
        # |  |  |  |  |
        # *  *  *  *  * user-name  command to be executed
## 注:定时任务最小单位为分钟,无法精确到秒级


例:
	# 每分钟都执行一次ls命令
	* * * * * ls
	# 每天的凌晨两点10分执行一次ls命令
	10 02 * * * ls
        # 每年的1,2,3月的1到14号并且是星期天的凌晨两点执行一次ls命令
        00 02 1-14 1,2,3 7 ls
        # 每过5分钟执行一次ls命令
        */5 * * * * ls
        # 每天的1到7点和23点到24点执行一次ls命令
        00 23-7 * * * ls

4.定时任务相关命令

crontab
	选项:
		-l(list):列出当前定时任务的设置
		-e(edit):编辑定时任务,也就是编辑 /var/spool/cron/root文件
		-r(remove):删除全部的定时任务
		-u(user):指定定时任务的用户

5.定时任务的调试规则

1.crond调试
	1.1 调整任务每分钟执行的频率,便于做后续调试
	1.2 如果使用cron来运行脚本,将脚本执行的结果写入指定日志文件,观察日志内容是否正常
	1.3 命令使用绝对路径,防止无法找到命令导致定时任务执行错误
	1.4 通过查看/var/log/cron日志,检查执行的结果,方便进行调试
2.crond编写思路
	2.1 手动执行命令,保留执行成功的结果
	2.2 编写脚本
		1.脚本最好统一存放到同一目录下
		2.脚本内容复制执行成功的命令,减少每个环节出错几率
		3.脚本内容尽可能的优化,使用一些变量和判断语句
		4.脚本的输出信息可以重定向到其他文件中或重定向到/dev/null中
	2.3 执行脚本
		1.使用bash命令执行,防止脚本没有增加执行权限(x)
		2.执行脚本成功后,复制该执行的命令,减少错误
	2.4 编写定时任务
		1.加上必要的注释信息,如人,时间,任务等
		2.设定定时任务的执行周期
		3.粘贴执行脚本的命令
	2.5 调试定时任务
		1.增加任务频率测试
		2.检查环境变量问题
		3.检查crond服务日志

6.备份定时任务的内容

	为了防止使用crontab -r误删掉所有的定时任务,所以最好备份定时任务的内容:
	cp /var/spool/cron/用户名 目标路径

7.拒绝指定用户使用定时任务

	直接编写/etc/cron.deny,在里面添加指定的用户,则该用户无法使用定时任务

定时任务实战

1.时间同步定时任务

1.下载时间同步命令:
	yum install -y ntpdate
2.测试该命令是否可以执行成功:
	 2 ✗ 15:22:44 root@ji,10.0.0.176:~ # ntpdate time1.aliyun.com
11 May 15:41:55 ntpdate[37869]: adjust time server 203.107.6.88 offset 0.000913 sec
3.编辑定时任务:
	crontab -e
4.写入规则并将输出内容扔进黑洞:
	*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
5.加上规范注释:
	# Usage : Sync Date  By:jl Date:2022/5/10
	*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
6.动态查看定时任务日志:
	tail -f /var/log/cron
	# 最开始制作定时任务时最好每分钟执行一次,方便查找错误

2.每天的凌晨三点做一次备份

需求:
	1.备份的文件名格式为:当前年月日_当前的主机名_etc.tar.gz
	2.存放备份内容的目录只保留三天的数据
	3.在执行计划任务时,不输出任务信息
1.将备份的文件用tar命令压缩
tar -zcPf /tmp/`date +%F`_`hostname`_etc.tar.gz /etc
2.编写脚本
# bin/bash
vim /tmp/data_backup.sh
# 创建存放备份文件的目录,如果存在则不创建
mkdir -p /tmp/bak_date
# 为该目录设置变量,以便以后修改
Backup_catalog="/tmp/bak_date"
tar -zcPf $Backup_catalog/`date +%F`_`hostname`_etc.tar.gz /etc
3.在备份目录中只保存三天的数据
find $Backup_catalog -type f ! -mtime  -3 |xargs rm -f
4.将第三步的内容写入脚本中
# bin/bash
mkdir -p /tmp/bak_date
Backup_catalog="/tmp/bak_date"
tar -zcPf $Backup_catalog/`date +%F`_`hostname`_etc.tar.gz /etc
find $Backup_catalog -type f ! -mtime  -3 |xargs rm -f
5.测试脚本是否执行成功:
	 sh data_backup.sh 

6.编写定时任务:
	 crontab -e
7.将脚本写入进去并将输出的内容输入到黑洞中
	* * * * * /usr/bin/sh data_backup.sh &>/dev/null
8.查看日志是否有错误
	tail -f /var/log/cron
9.修改定时任务的指定时间并添加注释
# Usage: Backup By:jl Date:2022/5/11
00 03 * * * /usr/bin/sh data_backup.sh &>/dev/null

3.Linux发送邮件

1.安装邮件工具mailx:
	yum install -y mailx
2.配置发件人:
	 vim /etc/mail.rc
	 在最后一行加入:
	 	## 发件人
	 	set from=你的qq邮箱
	 	## QQ邮箱使用的邮件协议
	 	set smtp=smtps://smtp.qq.com:465
	 	## 发件人账号
	 	set smtp-auth-user=你的qq邮箱
	 	## 发件人密码
	 	set smtp-auth-password=#客户端授权码
	 	## 认证登录
	 	set smtp-auth=login
	 	## 忽略证书
	 	set ssl-verify=ignore
	 	## 证书存放目录
	 	set nss-config-dir=/etc/pki/nssd
	 	
	 	
set from=# 你的QQ邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=# 你的QQ邮箱登录账号
set smtp-auth-password=# 客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

3.配置邮箱获取客户端授权码
	3.1 打开浏览器搜索qq邮箱

	3.2 登录qq邮箱后,点击设置

	3.3 再点击账户

	3.4 往下翻找到POP3和IMAP服务并开启

	3.5 开启后获取客户端授权码

4.测试是否可以发送邮箱:
	echo 'text' |mail -s '标题' 目标邮箱

4.使用定时任务发送邮件

1.创建一个目录存放要发送的文件:
	mkdir /tmp/test
2.创建要发送的文件并编写:
	touch {1..9}.txt
	vim ... .txt
3.编写完成后编写脚本:
	vim /tmp/test.sh
	# /bin/bash
    # 为测试目录设置变量
    test_dir="/tmp/test"
    # 将文件设置成变量
    test_file=`ls -1 $test_dir/|head -1`
    # 查看目录下是否有文件存在
    count=`ls -1 $test_dir/ |wc -l`
    # 判断目录下有文件,则将文件里的内容发送到指定的邮箱中,并把该文件移动到/opt下
    if [ $count -gt 0 ];then
            cat $test_dir/$test_file |mail -s '测试' 您的邮箱
            mv $test_dir/$test_file /opt
    fi
4.测试脚本是否发送成功:
	sh /tmp/test.sh

5.编写定时任务:
	[root@localhost tmp]# crontba -e
	# Usage: test_mail By:jl Date:2022/05/11
	* * * * * /bin/sh test.sh &> /dev/nul
6.查看日志(或查看邮箱是否接收到信息):
	tail -f /var/log/cron
posted on   jilei  阅读(315)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示