定时任务-crond day36,37
什么是crond
crond是一个服务,是定时任务的守护进程
定时r任务的作用
1.系统级别的定时任务
临时文件清理
系统信息采集
日志文件切割
2.用户级别的定时任务
定时向互联网同步时间
定时备份系统配置文件
定时备份数据库的数据
定时任务语法
[root@miaosen ~]# 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
# | | | | |
# * * * * * user-name command to be executed
说法:
写定时任务,上来就六亲不认写 五颗星
30 7 * * * 用户 1s
分 时 日 月 周
切记:定时任务最小单位为分钟,无法精确到秒级
定时任务相关命令
crontab
-l:list 列出当前定时任务的列表
-e:edit 编辑定时任务 vim /var/spool/cron/root
-r:remobe 删除定时任务 (删除全部定时任务)
-u:user 指定定时任务的用户
# 每天凌晨2点,执行一次ls命令
0002 * * * ls >/dev/null
定时任务实战
# 1.时间同步定时任务
1)需要下载时间同步命令
[root@miaosen <sub>]# yum install -y ntpdate
2)要先测试命令是否可以在命令执行成功
[root@miaosen </sub>]# ntpdate time1.aliyun.com
11 May 16:12:37 ntpdate[9700]: step time server 203.107.6.88 offset 1.793706 sec
3)编辑定时任务
[root@miaosen <sub>]# crontab -e
4)写入规则(命令复制刚才执行成功的命令)
* * * * * ntpdate time1.aliyun.co
5)查找该命令的绝对路径
[root@miaosen </sub>]# which crontab
/usr/bin/crontab
6)完善规则中的命令路径
* * * * * /usr/sbin/ntpdate time1.aliyun.com
7)根据规定的时间来进行定时任务编写
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com
8)查看命令是否有输出内容,如果有则扔进黑洞
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
9)加上规范注释
# Usage: Sync Date By:zls Date:2022/05/11
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
10) 查看定时任务日志
最开始定时任务,每分钟执行一次,写完之后查看日志。
[root@miaosen ~]# tail -f /var/log/cron
需求:每天凌晨3点做一次备份
将备份命令写入一个脚本中
任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求只保留三天的数据
3.在执行计划任务时,不要输出任务信息
# 脚本内容
[root@miaosen /]# vim backup_etc.sh
backup_dir=/backup/
mkdir -p $backup_dir
cd / && tar zcf $backup_dir`date +%F`_`hostname`_etc.tar.gz etc
find $backup_dir -type f ! -mtime -3 | xargs rm -f
# 定时任务
[root@miaosen /]# crontab -e
# Usage:backup etc by:root Date:2022/05/11
00 03 * * * /bin/sh /backup_etc.sh &>/tmp/backup
# 这行无所谓 不知道怎么解释
# 变量
backup_dir=/backup/
# 创建目录
mkdir -p $backup_dir
# 切换目录到/下 把etc目录压缩文件到/backup/下
1.`date +%F`当前时间
2.`hostname` 主机名
cd / && tar zcf $backup_dir`date +%F`_`hostname`_etc.tar.gz etc
# 查找三天前的数据删除掉
find $backup_dir -type f ! -mtime -3 | xargs rm -f
[root@miaosen /]# crontab -e
# 注释行
# Usage:backup etc by:root Date:2022/05/11
# 每天凌晨三点执行脚本 并把输出任务信息丢到/tmp/backup里
00 03 * * * /bin/sh /backup_etc.sh &>/tmp/backup
备份定时任务的内容
就是备份/var/spool/cron/用户名
[root@miaosen /]# cp /var/spool/cron/root /bak/root_cron
拒绝某个用户使用定时任务
[root@miaosen /]# vim /etc/cron.deny
lqy
## 只要将用户名写入 /etc/cron.deny文件中,则该用户无法使用定时任务
定时任务调试规则
1.crond调试
1)调整任务每分钟执行的频率,以便做后续的调试。
2)如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件,观察日志内容是否正常。
3)命令使用绝对路径,防止无法找到命令导致定时任务执行产生故障。
4)通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试
2.crond编写思路
- 1.手动执行命令,然后保留执行成功的结果。
- 2.编写脚本
- 脚本需要统一路径/scripts
- 脚本内容复制执行成功的命令(减少每个环节出错几率)
- 脚本内容尽可能的优化,使用一些变量或使用简单的判断语句
- 脚本执行的输出信息可以重定向至其他位置或写入/dev/null
- 3.执行脚本
- 使用bash命令执行,防止脚本没有增加执行权限(/usr/bin/bash)
- 执行脚本成功后,复制该执行的命令,以便写入cron
- 4.编写计划任务
- 加上必要的注释信息,人,时间,任务
- 设定计划任务执行的周期
- 粘贴执行脚本的命令(不要手敲)
- 5.调试计划任务
- 增加任务频率测试
- 检查环境变量问题
- 检查crond服务日志
linux发邮件
# 1.安装发邮件工具mailx
[root@miaosen /]# yum install -y mailx
# 2.配置发件人
[root@miaosen /]# vim /etc/mail.rc
## 发件人
set from=2502938064@qq.com
## qq邮箱使用的邮件协议
set smtp=smtps://smtp.qq.com:465
## 发件人账号
set smtp-auth-user=2502938064
## 发件人密码
set smtp-auth-password=ddertbfdaltjdjbe
## 认证登录
set smtp-auth=login
## 忽略证书
set ssl-verify=ignore
## 证书存放目录
set nss-config-dir=/etc/pki/nssdb
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
配置邮箱
点击设置->账户

开启POP和IMAP服务

生产授权码


# 发送邮件
echo '111' |mail -s '11' 邮箱

使用定时任务发情书
## 创建情书存放目录
[root@miaosen /]# mkdir /love
## 编写情书
[root@miaosen /]# vim /love/1.txt
[root@miaosen /]# vim /love/2.txt
[root@miaosen /]# vim /love/3.txt
## 编写发送情书的脚本
[root@miaosen /]# cat /love/1.txt |mail -s '情书' 2502938064@qq.com
[root@miaosen /]# vim send_love.sh
love_dir='/love'
love_name=`ls -l $love_dir/|head -1`
cat $love_dir/$love_name |mail -s '情书' 2502938064@qq.com
rm -f $love_dir/$love_name
## 编写定时任务
1)测试脚本发送
[root@miaosen /]# /bin/sh /root/send_love.sh
2)编辑定时任务
# Usage: Send Love By: zls Date: 2022/05/11
* * * * * /bin/sh /root/send_love.sh &>/dev/nul
3)查看日志
[root@miaosen /]#
love_dir="/love"
love_name=`ls -l $love_dir/|head -1`
count=`ls -l /love/|wc-l`
if
[ $count-gt0 ];then
cat$love_dir/$love_name |mail -s'情书' 2502938064@qq.com
mv$love_dir/$love_name /tmpfi
fi