定时任务
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:~
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
例:
* * * * * ls
10 02 * * * ls
00 02 1-14 1,2,3 7 ls
*/5 * * * * 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:~
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.加上规范注释:
*/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.编写脚本
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.将第三步的内容写入脚本中
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.修改定时任务的指定时间并添加注释
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邮箱
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=
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=
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
test_dir="/tmp/test"
test_file=`ls -1 $test_dir/|head -1`
count=`ls -1 $test_dir/ |wc -l`
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]
* * * * * /bin/sh test.sh &> /dev/nul
6.查看日志(或查看邮箱是否接收到信息):
tail -f /var/log/cron
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!