定时任务
作者:互联网
定时任务 crond
# 什么是crond
crond是一个服务,是定时任务的守护进程
定时任务的作用
1.系统级别的定时任务
临时文件清理
系统信息采集
日志文件切割
2.用户级别的定时任务
定时向互联网同步时间
定时备份系统配置文件
定时备份数据库的数据
定时任务语法
[root@zh ~]# 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
语法:写定时任务上来就六亲不认写五颗星
* * * * * 用户 ls
分 时 日 月 周
切记 :定时任务最小单位分钟,无法精确到秒级
定时任务相关命令
crontab
-l :list列出当前定时任务的列表
-e :edit 编辑定时任务 vim /var/spool/cron/root
-r :remove 删除定时任务 (删除全部定时任务)
-u :user 指定定时任务的用户
定时任务实战
时间同步任务
-
需要下载时间同步命令
yum install -y ntpdate
-
先测试命令是否可以在命令行执行成功
[root@localhost ~]# ntpdate time1.aliyun.com
-
编写定时任务
[root@localhost ~]# crontab -e
-
写入规则 (复制刚刚执行成功的命令)
* * * * * ntpdate time1.aliyun.com
-
查找该命令绝对路径
[root@localhost ~]# which ntpdate /usr/sbin/ntpdate
-
完善规则中的绝对路径
* * * * * /usr/sbin/ntpdate time1.aliyun.com
-
根据规定时间来进行定时任务编写
* * * * * /usr/sbin/ntpdate time1.aliyun.com
-
查看命令是否有输出,有则扔进黑洞
* * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
-
加上规范注释
# Usage :时间同步 By :zh date:2022/05/11 * * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
-
查看定时任务日志(最开始定时任务每分钟执行一次)
[root@localhost ~]# tail -f /var/log/cron
每天凌晨3点做一次备份
需求 :每天凌晨3点做一次备份
将备份命令写入一个脚本里
任务 :
1.每天备份文件名要求格式 :2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求保留3天的数据
3.在执行计划任务时,不要输出任务信息
-
备份使用tar命令
cd / && tar zcf 2018-02-20_hostname_etc.tar.gz etc
实现包名加日期和主机名需求
cd / && tar zcf `date +%F`_`hostname`_etc.tar.gz etc
-
将命令复制到脚本里
[root@localhost ~]# vim baifen.sh #!/bash/bash cd / && tar zcf `date +%F`_`hostname`_etc.tar.gz etc
-
只保存3天的数据
find $backup -type f ! -mtime -3 | xargs rm -f
-
不输出任务信息(在定时任务里加上&>/dev/null)
-
优化脚本
#!/bash/bash backup="/backup" mkdir -p $backup cd / && tar zcf $backup/`date +%F`_`hostname`_etc.tar.gz etc find $backup -type f ! -mtime -3 | xargs rm -f
-
手动执行脚本
[root@localhost ~]# sh baifen.sh [root@localhost ~]# ls /backup/ 2022-05-11_localhost.localdomain_etc.tar.gz
-
编写定时任务
crontab -e * * * * * /bin/bash /root/baifen.sh
满足时间需求和不输出内容
* 03 * * * /bin/bash /root/baifen.sh &>/dev/null
加上注释
# Usage : 备份etc By :zh date :2022/05/11 * 03 * * * /bin/bash /root/baifen.sh &>/dev/null
脚本最终内容
#!/bash/bash
backup="/backup"
mkdir -p $backup
cd / && tar zcf $backup/`date +%F`_`hostname`_etc.tar.gz etc
find $backup -type f ! -mtime -3 | xargs rm -f
定时内容最终内容
# Usage : 备份etc By :zh date :2022/05/11
* 03 * * * /bin/bash /root/baifen.sh &>/dev/null
备份定时任务内容
就是备份/var/spool/cron/用户名
[root@localhost ~]# cp /var/spool/cron/root /backup/root_cron
拒绝某个用户使用定时任务
[root@localhost ~]# vim /etc/cron.deny
zh
# 只要将用户名写入 /etc/cron.deny 文件中 ,该用户无法使用定时任务
定时任务调试规则
# crond调试
1.调整任务每分钟频率,以便后续的调试
2.如果任务使用cron运行脚本,请将脚本的执行结果写入指定文件日志,观察日志内容是否正常
3.命令使用绝对路径,防止无法找到命令导致定时任务执行产生故障
4.通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试
# crond编写思路
1.手动执行命令,然后保留执行成功的结果
2.编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本内容尽可能的优化,使用一些变量或使用简单的判断语句
3.执行脚本
使用bash命令执行,防止脚本没有增加执行权限
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
加上必要的注释,人 、时间、任务
设定计划任务执行周期
粘贴执行脚本的命令(不要手敲)
Linux发邮件
-
安装发邮件工具mailx
[root@localhost ~]# yum -y install mailx
-
配置发件人
[root@localhost ~]# vim /etc/mail.rc #编辑邮件配置文件 [root@zls ~]# vim /etc/mail.rc #发件人 set from=253097001@qq.com #邮件服务器 set smtp=smtp.qq.com #发件人用户名 set smtp-auth-user=253097001@qq.com #发件人密码(QQ邮箱不可以使用密码,只能使用授权码) set smtp-auth-password=xxx #登录方式 set smtp-auth=login #邮件服务器协议及端口 set smtp=smtps://smtp.qq.com:465 #忽略证书 set ssl-verify=ignore #指定证书位置 set nss-config-dir=/etc/pki/nssdb/ set bsdcompat set bsdcompat set from=2646491240@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=2646491240@qq.com set smtp-auth-password=erviwplvcfsmeacd set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/
配置邮箱
点击设置 >账户
开启POP3和IMAP服务
# 发送邮件
echo '内容' | mail -s '标题' 邮箱
[root@localhost ~]# echo '测试' | mail -s '测试' 2646491240@qq.com
使用定时任务发情书
-
创建情书存放目录
mkdir /love
-
编写情书
[root@localhost ~]# vim /love/1.txt [root@localhost ~]# vim /love/2.txt [root@localhost ~]# vim /love/3.txt [root@localhost ~]# vim /love/4.txt
-
编写发送情书的脚本
#!/bin/bash love_dir="/love" love_name=`ls -1 $love_dir | head -1` cat $love_dir/$love_name | mail -s '情书' 2646491240@qq.com mv $love_dir/$love_name /opt ~
优化脚本
#!/bin/bash
love_dir="/love"
love_name=`ls -1 $love_dir | head -1`
aass='ls -1 /love/ | wc -l'
if [$aass -gt 0];then
cat $love_dir/$love_name | mail -s '情书' 2646491240@qq.com
mv $love_dir/$love_name /opt
fi
-
测试脚本发送
root@localhost ~]# sh qingshu.sh
-
编写定时任务
* 03 * * * /bin/bash /root/qingshu.sh
标签:love,etc,任务,定时,root,localhost 来源: https://www.cnblogs.com/ghjhkj/p/16259513.html