0
点赞
收藏
分享

微信扫一扫

crond定时任务

定时任务-crond

什么是crond

crond是一个服务,是定时任务的守护进程

定时任务的作用

1-系统级别的定时任务

临时文件清理

系统信息采集

日志文件分割

2-用户级别的定时任务

定时向互联网同步时间

定时备份系统配置文件

定时备份数据库的数据

定时任务语法

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

语法:写定时任务,建议先把五个星号写出来

五个星号代表的含义:
 *  *   *   *   *
分  时  日  月  周

#定时任务最小单位分钟,无法精确到秒级

定时任务相关命令

crontab 
-l:list 列出当前定时任务的列表 
-e:edit 编辑定时任务 vim /var/spool/cron/root 
-r:remove 删除定时任务(删除全部定时任务) 
-u:user 指定定时任务的用户

# 每天凌晨2点,执行一次ls命令 
00 02 * * * ls >/dev/null 
# 每个月的1号凌晨2点执行一次ls命令 
00 02 1 * * ls 
# 每年的2月14凌晨2点,执行一次ls命令 
00 02 14 2 * ls 
# 每周日,凌晨2点执行一次ls命令 
00 02 * * 7 ls 
# 每年6月份的每个周五凌晨2点执行一次ls命令 
00 02 * 6 5 ls 
# 每年的每个月的14号恰巧又是周日的时候
00 02 14 * 7 ls
# 每年的2月14号,恰巧又是周日凌晨两点才执行ls命令 
00 02 14 2 7 ls 
# 每天凌晨2点,每隔10分钟执行一次ls命令 
*/10 02 * * * ls 
# 每分钟执行一次ls命令 
* * * * * ls 
# 每年的2月14日,00点执行一次ls 
00 00 14 2 * ls
# 每隔5分钟执行一次ls命令 
*/5 * * * * ls 
# 每年的1月和5月和8月的每天凌晨2点都执行一次ls命令 
00 02 * 1,5,8 * ls 
# 每个月的1号到8号凌晨2点执行一次ls命令 
00 02 1-8 * * ls 
# 每天晚上21点执行一次ls命令 
0 21 * * * ls 
#每个月的1号 10号 和 22号的凌晨4点45分执行一次ls命令 
45 4 1,10,22 * * ls 
# 每个月的1号到10号4点45分执行一次ls命令
45 4 1-10 * * ls 
# 每个月的每隔2天的8点到11点的03分和15分分别执行ls命令 
3,15 8-11 */2 * * ls 
# 每天的1点到7点和23点到24点的整点执行一次ls命令 
0 23-7/1 * * * ls 
# 每周的周一到周五21点15分执行一次ls命令 
15 21 * * 1-5 ls

定时任务实战

#时间同步任务
#需要下载时间同步命令
yum install -y ntpdate

#测试命令,命令行中写入,同步阿里云的时间
ntpdate timel.aliyun.com

#编辑定时任务
crontab -e  (复制刚刚执行成功同步时间的命令)
* * * * * ntpdate time1.aliyun.com

#查找该命令的绝对路径
which ntpdate
/usr/sbin/ntpdate

#完善规则中的命令路径
* * * * * /usr/sbin/ntpdate time1.aliyun.com

#根据自己所需要的时间来进行定时任务编写
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com

#查看命令是否有输出内容。如果有则重定向到dev/null黑洞里
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null

#加上规范注释
# Usage: Sync Date By:zls Date:2022/05/10
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null

#查看定时任务日志
最开始定时任务,每分钟执行一次,写完之后查看日志。 
[root@localhost ~]# tail -f /var/log/cron

实战二

需求:每天凌晨3点做一次备份

将备份命令写入一个脚本中

任务:

1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz

2.存放备份内容的目录要求只保留3天的数据

3.在执行计划任务时,不要输出任务信息

# 1.备份使用tar命令 
cd / && tar zcf 2018-02-20_hostname_etc.tar.gz etc 

1- 实现包名加日期需求:date +%F 
cd / && tar zcf `date +%F`_hostname_etc.tar.gz etc 
cd / && tar zcf $(date +%F)_hostname_etc.tar.gz etc 

2- 实现包名加主机名需求:hostname 
cd / && tar zcf `date +%F`_`hostname`_etc.tar.gz etc 
cd / && tar zcf $(date +%F)_$(hostname)_etc.tar.gz etc 

3- 将命令写入脚本中 
[root@zls ~]# vim backup_etc.sh 
#!/bin/bash 
cd / && tar zcf /backup/$(date +%F)_$(hostname)_etc.tar.gz etc

4- 只保留3天的数据 
find /backup -type f ! -mtime -3|xargs rm -f 

5- 不输出任务信息 在定时任务中 &>/dev/null 

6- 编写定时任务
# 先手动执行一次脚本,在命令行中
[root@localhost ~]# /bin/sh /root/backup_etc.sh

# 如果没有报错,再编写定时任务
[root@zls ~]# crontab -e

# 定时任务,提高频率先每分钟执行一次
* * * * * /bin/sh /root/backup_etc.sh

#优化定时任务内容
# 1.不需要输出内容 
* * * * * /bin/sh /root/backup_etc.sh &>/dev/null 
# 2.满足需求中的时间
00 03 * * * /bin/sh /root/backup_etc.sh &>/dev/null 
# 3.加注释 # 
Usage: Backup etc By:zls Date:2022/05/11 
00 03* * * /bin/sh /root/backup_etc.sh &>/dev/null

#注意:脚本中每添加一行内容就测试执行一次

# 采用优化脚本内容
#!/bin/bash
bak_dir="/bak" 
mkdir -p $bak_dir
cd / && tar zcf $bak_dir/$(date +%F)_$(hostname)_etc.tar.gz etc 
find $bak_dir -type f ! -mtime -3|xargs rm -f

备份定时任务的内容

就是备份/var/spool/cron/本机用户名,是那个用户备份那个

cp /var/spool/cron/root /bak/root_cron

拒绝某个用户使用定时任务

# 只要将用户名写入 /etc/cron.deny文件中,则该用户无法使用定时任务
vim /etc/cron.deny
xwq
lzn

定时任务调试规则及编写思路

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.安装邮件工具
yun install -y mailx

2.配置发件人
vim /etc/mail.rc
 -- 发件人
 set from=邮箱
 -- 邮箱使用的邮件协议
 set smtp=邮箱协议
 -- 发件人账号
 set smtp-auth-user=邮箱账号
 -- 发件人密码
 set smtp-auth-password=客户端授权码
 -- 认证登入
 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/

配置邮箱

image20220511194325668.png

开启pop3/SMTP服务

image20220511194400446.png

image20220511194451607.png

#发送邮件的命令
echo 'test' | mail -s '邮件标题' 邮箱 

使用定时任务发情书

#创建一个放情书的目录
mkdir /lovebook/
#编写情书
vim /lovebook/1.txt
vim /lovebook/2.txt
vim /lovebook/3.txt
vim /lovebook/4.txt
vim /lovebook/5.txt
vim /lovebook/6.txt
#编写发送情书的脚本
 cat /love/1.txt |mail -s '情书' 邮箱
 vim send_love.sh
 #!/bin/bash
 love_dir="/lovebook"                    变量love_dir=/lovebook这个目录
 love_name=`ls -1 $love_dir/|head -1`    变量love_name=ls -1 也就是以列排序
                                         $love_dir/head -1 也就是以列查看lovebook这个目录只要第一个文件
 cat $love_dir/$love_name |mail -s '情书' 邮箱  cat上个脚本的文件
 rm -f $love_dir/$love_name   删除上个脚本的文件

 ## 编写定时任务 
 1 测试脚本发送 
 /bin/sh /root/send_love.sh 
 2 编辑定时任务 
 # Usage: Send Love By: zls Date: 2022/05/11 
 * * * * * /bin/sh /root/send_love.sh &>/dev/null 
 3 查看日志 
 tail -f /var/log/cron
 #!/bin/bash
 love_dir="/lovebook"
 love_name=`ls -1 $love_dir/|head -1`
 count=`ls -1 /love/|wc -l`

 if [ $count -gt 0 ];then 
 cat $love_dir/$love_name |mail -s '情书' 133411023@qq.com
 mv $love_dir/$love_name /tmp 
 fi
举报

相关推荐

0 条评论