首页 > 其他分享 >定时任务

定时任务

时间:2022-10-08 19:11:22浏览次数:43  
标签:etc 任务 ls 定时 root localhost

目录

定时任务-crond

什么是crond

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

定时任务的作用

1.系统级别的定时任务

临时文件清理

系统信息采集

日志文件切割

2.用户级别的定时任务

定时向互联网同步时间

定时备份系统配置文件

定时备份数据库的数据

定时任务语法

[root@localhost ~]# 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

# 语法
写定时任务,上来就写五颗星

*  *  *  *  *  用户 命令
分 时 日  月 周


*/1 1,2,3,6 2-3,7-8 * * command to be executed
/:每1分钟
,:1点,2点,3点和6点
-:2号到3号和7号到8号

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

定时任务相关命令

crontab
-l:list 列出当前定时任务的列表
-e:edit 编辑定时任务  =vim /var/spool/cron/root
-r:remove 删除定时任务(删除全部定时任务,不建议使用。最好进入定时任务,使用dd删除)
-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

定时任务实战

# 1.时间同步定时任务 
1)需要下载时间同步命令
[root@localhost ~]# yum install -y ntpdate 

2)要先测试命令是否可以在命令行执行成功
[root@localhost ~]# ntpdate time1.aliyun.com
10 May 16:10:11 ntpdate[10917]: adjust time server 203.107.6.88 offset 0.109884 sec

3)编辑定时任务
[root@localhost ~]# crontab -e 

4)写入规则(命令复制刚才执行成功的命令)
* * * * * ntpdate time1.aliyun.com 

5)查找该命令的绝对路径
[root@localhost ~]# which ntpdate 
/usr/sbin/ntpdate 

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:lza Date:2022/05/10 
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null 

10)查看定时任务日志
最开始定时任务,每分钟执行一次,写完之后查看日志
[root@localhost ~]# tail -f /var/log/cron
需求:每天凌晨3点做一次备份
将备份命令写入一个脚本中
任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求只保留3天的数据
3.在执行计划任务时,不要输出任务信息


# 备份使用tar命令
cd / && tar zcf 2022-05-11_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@localhost ~]# 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 

[root@localhost ~]# vim backup_etc.sh 
#!/bin/bash 
cd / && tar zcf /backup/$(date +%F)_$(hostname)_etc.tar.gz etc 
find /backup -type f ! -mtime -3|xargs rm -f 

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

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

# 如果没有报错,再编写定时任务
[root@localhost ~]# crontab -e 
# 定时任务,提高频率先每分钟执行一次
* * * * * /bin/sh /root/backup_etc.sh 

7)优化定时任务内容
# 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 

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


8)优化脚本内容
[root@localhost ~]# crontab -e 
#!/bin/bash 
bak_dir="/backup" 
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/用户名 这个文件内容
[root@localhost ~]# cp /var/spool/cron/root /bak/root_cron

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

# 只要将用户名写入 /etc/cron.deny 文件中,则该用户无法使用定时任务
[root@localhost ~]# vim /etc/cron.deny 
lza

定时任务调试规则

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@localhost ~]# yum install -y mailx 

# 2.配置发件人
[root@localhost ~]# vim /etc/mail.rc 
# 发件人
set [email protected] 
# QQ邮箱使用的邮件协议
set smtp=smtps://smtp.qq.com:465 
# 发件人账号
set [email protected] 
# 发件人密码
set smtp-auth-password=#客户端授权码 
# 认证登录
set smtp-auth=login 
# 忽略证书
set ssl-verify=ignore 
# 证书存放目录
set nss-config-dir=/etc/pki/nssdb/ 


# 在 /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/nssdb/

# 3.配置邮箱,获取客户端授权码

# 4.发送邮件
[root@localhost ~]# echo 'lza'|mail -s 'xxx' [email protected] 
# 报错,忽略证书,不影响
[root@localhost ~]# Error in certificate: Peer's certificate issuer has been marked as not trusted by the.

配置邮箱:打开QQ邮箱,设置,开启服务。获取授权码

1652257161268

使用定时任务发情书

# 1.创建情书存放目录
[root@localhost ~]# mkdir /love 

# 2.编写情书内容
[root@localhost ~]# vim /love/1.txt 
[root@localhost ~]# vim /love/2.txt 
[root@localhost ~]# vim /love/3.txt 

# 3.编写发送情书的脚本
[root@localhost ~]# cat /love/1.txt |mail -s '情书' [email protected] 

[root@localhost ~]# vim send_love.sh 
#!/bin/bash 
love_dir="/love" 
love_name=`ls -1 $love_dir/|head -1` 

cat $love_dir/$love_name |mail -s '情书' [email protected] 
rm -f $love_dir/$love_name 

# 4.编写定时任务
1)测试脚本发送
[root@localhost ~]# /bin/sh /root/send_love.sh 

2)编辑定时任务
[root@localhost ~]# crontab -e 
# Usage: Send Love By:lza Date: 2022/05/11 
* * * * * /bin/sh /root/send_love.sh &>/dev/null 

3)查看日志
[root@localhost ~]# tail -f /var/log/cron 




# 如果,有文件就发送文件内容,没有文件就发送内容为零的邮件
[root@localhost ~]# vim send_love.sh
#!/bin/bash 
love_dir="/love" 
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 '情书' [email protected] 
  mv $love_dir/$love_name /tmp 
fi

思维导图

标签:etc,任务,ls,定时,root,localhost
From: https://www.cnblogs.com/LZA1218/p/16769940.html

相关文章