day021-定时任务

文章目录

  • [1. cron](#1. cron)
    • [1.1 检查是否安装](#1.1 检查是否安装)
    • [1.2 检查是否开机自启动](#1.2 检查是否开机自启动)
    • [1.3 配置文件与相关命令](#1.3 配置文件与相关命令)
    • [1.4 配置文件格式](#1.4 配置文件格式)
  • [2. 案例](#2. 案例)
    • [2.1 同步时间](#2.1 同步时间)
    • [2.2 定时备份/etc和/var/log目录](#2.2 定时备份/etc和/var/log目录)
    • [2.3 定时巡检脚本](#2.3 定时巡检脚本)
  • [3. 练习三剑客过滤](#3. 练习三剑客过滤)
    • [3.1 去重统计ip数量](#3.1 去重统计ip数量)
    • [3.2 去重统计第7列 用户访问的url的数量](#3.2 去重统计第7列 用户访问的url的数量)
    • [3.3 去重统计第9列 状态码与数量](#3.3 去重统计第9列 状态码与数量)
    • [3.4 添加条件统计指定范围,指定日期的日志情况.](#3.4 添加条件统计指定范围,指定日期的日志情况.)
    • [3.5 书写脚本自动完成上面统计](#3.5 书写脚本自动完成上面统计)
  • [4. 踩坑记录](#4. 踩坑记录)
    • [4.1 /bin和/usr/bin的关系(/sbin和/usr/sbin)?](#4.1 /bin和/usr/bin的关系(/sbin和/usr/sbin)?)
    • [4.2 虚拟机进入紧急模式](#4.2 虚拟机进入紧急模式)
    • [4.3 sort: 写入失败: /tmp/sort2f2zkI: 设备上没有空间](#4.3 sort: 写入失败: /tmp/sort2f2zkI: 设备上没有空间)
  • [5. 思维导图](#5. 思维导图)

1. cron

  • cron:官方定义就是 "Chronos(时间)" 的简写,与时间管理直接相关。

1.1 检查是否安装

shell 复制代码
[root@oldboy99-Kylin ~]# rpm -qa cron*
cronie-help-1.5.5-3.ky10.noarch
crontabs-help-1.11-21.ky10.noarch
cronie-1.5.5-3.ky10.x86_64
crontabs-1.11-21.ky10.noarch

1.2 检查是否开机自启动

shell 复制代码
[root@oldboy99-Kylin ~]# systemctl is-active crond.service 
active
[root@oldboy99-Kylin ~]# systemctl is-enabled crond.service 
enabled

1.3 配置文件与相关命令

  • cron的配置文件:/var/spool/cron/root
  • ubuntu中配置文件略有不同:/var/spool/cron/crontabs/root
cron命令 选项 说明
crontab -e edit,编辑cron配置文件
crontab -l list,显示定时任务信息

1.4 配置文件格式

任务执行时间(*(分) *(时) *(日) *(月) *(周)) 执行命令或脚本

  • 注意任务执行后的结果输出位置
  • 执行的命令要使用绝对路径
符号 说明
* 表示所有时间
/ 表示间隔时间
- 表示时间范围

2. 案例

2.1 同步时间

  • 测试命令
shell 复制代码
[root@oldboy99-Ubuntu ~]# ntpdate ntp.aliyun.com
26 May 17:42:51 ntpdate[1886]: adjust time server 203.107.6.88 offset -0.000672 sec
  • 编辑定时任务
shell 复制代码
[root@oldboy99-Ubuntu ~]# crontab -l
# 同步时间
*/2 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
  • 查看cron日志:
  • kylin中cron日志位置:/var/log/cron
  • ubuntu中cron日志位置:/var/log/syslog
shell 复制代码
[root@oldboy99-Ubuntu ~]# tail -f /var/log/syslog
May 26 17:44:42 oldboy99-Ubuntu crontab[1912]: (root) BEGIN EDIT (root)
May 26 17:45:01 oldboy99-Ubuntu cron[840]: (root) RELOAD (crontabs/root)
May 26 17:45:01 oldboy99-Ubuntu cron[840]: (root.bak) ORPHAN (no passwd entry)
May 26 17:45:04 oldboy99-Ubuntu systemd[1]: Started Session 3 of User root.
May 26 17:46:29 oldboy99-Ubuntu crontab[1912]: (root) REPLACE (root)
May 26 17:46:29 oldboy99-Ubuntu crontab[1912]: (root) END EDIT (root)
May 26 17:46:35 oldboy99-Ubuntu crontab[1989]: (root) LIST (root)
May 26 17:47:01 oldboy99-Ubuntu cron[840]: (root) RELOAD (crontabs/root)
May 26 17:47:01 oldboy99-Ubuntu cron[840]: (root.bak) ORPHAN (no passwd entry)
May 26 17:48:01 oldboy99-Ubuntu CRON[2053]: (root) CMD (/usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1)
......

2.2 定时备份/etc和/var/log目录

  • 脚本不要放在家目录,否则可能有权限故障
shell 复制代码
[root@oldboy99-Ubuntu ~]# mkdir /server/scripts -p
[root@oldboy99-Ubuntu ~]# cd /server/scripts/
[root@oldboy99-Ubuntu /server/scripts]# cat bak-conf-log.sh 
#!/bin/bash

#desc:备份etc和/var/log目录
#author:孙克旭

tar zcf /backup/etc-`date +%F_%w`.tar.gz /etc
tar zcf /backup/log-`date +%F_%w`.tar.gz /var/log
[root@oldboy99-Ubuntu /server/scripts]# crontab -e
crontab: installing new crontab
[root@oldboy99-Ubuntu /server/scripts]# crontab -l
# 同步时间
*/2 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
# 备份/etc和/var/log目录
0 0 * * * /usr/bin/bash /server/scripts/bak-conf-log.sh >/dev/null 2>&1

2.3 定时巡检脚本

  • cron的不会默认输出到屏幕,需要指定输出文件
  • 获取系统的各种信息
  • 编写脚本
shell 复制代码
#!/bin/bash
#desc:巡检脚本
#author:孙克旭

#主机信息
hostname=`hostname`
ip=`hostname -I`
os=`hostnamectl |awk -F ': +' '/Operating System/{print $2}'`
kernel=`hostnamectl |awk -F ': +' '/Kernel/{print $2}'`
cpu_arch=`uname -m`

cat << EOF
====主机基本信息====
主机名:$hostname
ip地址:$ip
系统版本:$os
内核版本:$kernel
CPU架构:$cpu_arch
EOF

#进程信息
proc_total=`top -bn1 |awk 'NR==2{print $2}'`
proc_zom=`top -bn1 |awk 'NR==2{print $(NF-1)}'`

cat << EOF
====进程信息====
进程总数:$proc_total
僵尸进程数:$proc_zom
EOF
  • 写入定时任务:
shell 复制代码
[root@oldboy99-Ubuntu ~]# crontab -l
# 同步时间
*/2 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
# 备份/etc和/var/log目录
0 0 * * * /usr/bin/bash /server/scripts/bak-conf-log.sh >/dev/null 2>&1
# 定时执行巡检脚本
0 0 * * * /bin/bash /server/scripts/check_system.sh >>/server/scripts/check_system.log 2>&1

3. 练习三剑客过滤

  • 企业生产环境日志,压缩包500mb左右,解压后5gb左右,1000w行.
  1. 去重统计ip数量
  2. 去重统计第7列 用户访问的url的数量
  3. 去重统计第9列 状态码与数量.
  4. 添加条件统计指定范围,指定日期的日志情况.
  5. 书写脚本自动完成上面统计.

3.1 去重统计ip数量

shell 复制代码
# 解压压缩包
[root@oldboy99-Kylin ~/oldboy]# tar xf 1000w-oldboy-lidao996-access.log.tar.xz 
# 去重统计ip数量
[root@oldboy99-Kylin ~/oldboy]# awk '{print $1}' 1000w-oldboy-lidao996-access.log |sort |uniq -c |sort -k1nr |head
 185611 220.181.51.57
 185542 220.181.51.41
  97735 220.181.51.58
  96784 220.181.51.42
  67199 61.135.165.36
  66686 61.135.165.4
  66686 61.135.169.5
  66679 61.135.165.42
  66650 61.135.165.39
  66541 61.135.169.6

3.2 去重统计第7列 用户访问的url的数量

shell 复制代码
[root@oldboy99-Kylin ~/oldboy]# TMPDIR=./tmp/ awk '{print $7}' 1000w-oldboy-lidao996-access.log |sort -T ./tmp/ |uniq -c |sort -k1nr -T ./tmp/ |head -5
  21696 /favicon.ico
   1192 /
    446 /recv.cm.php?_fbnVsbCxMRy9VODEyMC92MS4w
     65 /new/images/grey.gif
     54 /new/css/css.css

3.3 去重统计第9列 状态码与数量

shell 复制代码
[root@oldboy99-Kylin ~/oldboy]# TMPDIR=./tmp/ awk '{print $9}' 1000w-oldboy-lidao996-access.log |sort -T ./tmp/ |uniq -c |sort -k1nr -T ./tmp/ |head -5
5042786 302
4902220 200
  22541 404
  18193 499
  13464 502

3.4 添加条件统计指定范围,指定日期的日志情况.

shell 复制代码
[root@oldboy99-Kylin ~/oldboy]# sed -n '/16:30:00/,/16:32:00/p' 1000w-oldboy-lidao996-access.log |wc -l
23454

3.5 书写脚本自动完成上面统计

shell 复制代码
[root@oldboy99-Kylin /server/scripts]# cat test.sh
#!/bin/bash
#desc:练习三剑客
#author:孙克旭

# 变量
log="/root/oldboy/1000w-oldboy-lidao996-access.log"
tmp="/root/oldboy/tmp"

# 去重统计ip数量
echo "去重统计ip数量:"
awk '{print $1}' $log |sort |uniq -c |sort -k1nr |head

# 去重统计第7列 url数量
echo "去重统计url数量:"
TMPDIR=$tmp awk '{print $7}' $log |sort -T $tmp |uniq -c |sort -k1nr -T $tmp |head -5

# 去重统计第9列 状态码数量
echo "去重统计状态码数量:"
TMPDIR=$tmp awk '{print $9}' $log |sort -T $tmp |uniq -c |sort -k1nr -T $tmp |head -5

# 统计指定日期范围的数据
echo "统计指定范围的数据:"
sed -n '/16:30:00/,/16:32:00/p' $log |wc -l
[root@oldboy99-Kylin /server/scripts]# bash test.sh 
去重统计ip数量:
 185611 220.181.51.57
 185542 220.181.51.41
  97735 220.181.51.58
  96784 220.181.51.42
  67199 61.135.165.36
  66686 61.135.165.4
  66686 61.135.169.5
  66679 61.135.165.42
  66650 61.135.165.39
  66541 61.135.169.6
去重统计url数量:
  21696 /favicon.ico
   1192 /
    446 /recv.cm.php?_fbnVsbCxMRy9VODEyMC92MS4w
     65 /new/images/grey.gif
     54 /new/css/css.css
去重统计状态码数量:
5042786 302
4902220 200
  22541 404
  18193 499
  13464 502
统计指定范围的数据:
23454

4. 踩坑记录

4.1 /bin和/usr/bin的关系(/sbin和/usr/sbin)?

  • 硬链接,可以看到inode值相同
shell 复制代码
[root@oldboy99-Kylin /bin]# ll -d /bin/ /usr/bin/ -i
201326747 dr-xr-xr-x 2 root root 45056  5月 26 10:35 /bin/
201326747 dr-xr-xr-x 2 root root 45056  5月 26 10:35 /usr/bin/
[root@oldboy99-Kylin ~]# ll -di /sbin/ /usr/sbin/
135 dr-xr-xr-x 2 root root 20480  5月 26 10:35 /sbin/
135 dr-xr-xr-x 2 root root 20480  5月 26 10:35 /usr/sbin/
  • ubuntu与kylin不同,是软链接
shell 复制代码
[root@oldboy99-Ubuntu ~]# ll -di /bin /usr/bin/
     12 lrwxrwxrwx 1 root root     7 Feb 17  2024 /bin -> usr/bin/
1703938 drwxr-xr-x 2 root root 36864 May 13 16:04 /usr/bin//
[root@oldboy99-Ubuntu ~]# ll -di /sbin /usr/sbin/
     17 lrwxrwxrwx 1 root root     8 Feb 17  2024 /sbin -> usr/sbin/
1703947 drwxr-xr-x 2 root root 20480 May 13 15:51 /usr/sbin//

4.2 虚拟机进入紧急模式

  • 一开始认为是百度网盘自动备份虚拟机,导致虚拟机查找文件出现故障,后来一看虚拟机目录,未发现有百度网盘相关文件
  • 查看下/etc/fstab
  • 之前把一个硬盘删除了,系统中的硬盘名称发生了改变
  • 将硬盘名改正即可

4.3 sort: 写入失败: /tmp/sort2f2zkI: 设备上没有空间

  • sort -T /path/to/tmpdir:指定 sort 的临时文件目录
  • TMPDIR 环境变量:控制临时目录位置

5. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

相关推荐
TDengine (老段)17 分钟前
TDengine 运维——巡检工具(安装工具)
大数据·运维·数据库·物联网·时序数据库·tdengine·涛思数据
TDengine (老段)24 分钟前
TDengine 运维——巡检工具(定期检查)
java·大数据·运维·物联网·时序数据库·tdengine·涛思数据
炎码工坊25 分钟前
在Linux上安装Docker并配置镜像加速器:从入门到实战
linux·docker·云原生
言不由衷煦26 分钟前
Centos7.x内网环境Jenkins前端打包环境配置
运维·前端·jenkins
husertuo42 分钟前
Shell基础命令
linux·华为·云计算
bingHHB1 小时前
电商售后服务系统与其他系统集成:实现售后流程自动化
大数据·运维·数据库·自动化·接口隔离原则·集成学习
huangyuchi.2 小时前
【Linux】权限相关指令
linux·运维·服务器·笔记·指令·权限
☆凡尘清心☆2 小时前
CentOS 7 环境下部署 LAMP
linux·运维·centos
TDengine (老段)2 小时前
TDengine 运维——巡检工具(安装前检查)
大数据·运维·数据库·物联网·时序数据库·tdengine·涛思数据
FBI HackerHarry浩3 小时前
云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
linux·运维·服务器·rocky