文章目錄
- 1. cron
- 1.1 檢查是否安裝
- 1.2 檢查是否開機自啟動
- 1.3 配置文件與相關命令
- 1.4 配置文件格式
- 2. 案例
- 2.1 同步時間
- 2.2 定時備份/etc和/var/log目錄
- 2.3 定時巡檢腳本
- 3. 練習三劍客過濾
- 3.1 去重統計ip數量
- 3.2 去重統計第7列 用戶訪問的url的數量
- 3.3 去重統計第9列 狀態碼與數量
- 3.4 添加條件統計指定范圍,指定日期的日志情況.
- 3.5 書寫腳本自動完成上面統計
- 4. 踩坑記錄
- 4.1 /bin和/usr/bin的關系(/sbin和/usr/sbin)?
- 4.2 虛擬機進入緊急模式
- 4.3 sort: 寫入失敗: /tmp/sort2f2zkI: 設備上沒有空間
- 5. 思維導圖
1. cron
- cron:官方定義就是 “Chronos(時間)” 的簡寫,與時間管理直接相關。
1.1 檢查是否安裝
[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 檢查是否開機自啟動
[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 同步時間
- 測試命令
[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
- 編輯定時任務
[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
[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目錄
- 腳本不要放在家目錄,否則可能有權限故障
[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的不會默認輸出到屏幕,需要指定輸出文件
- 獲取系統的各種信息
- 編寫腳本
#!/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
- 寫入定時任務:
[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行.
- 去重統計ip數量
- 去重統計第7列 用戶訪問的url的數量
- 去重統計第9列 狀態碼與數量.
- 添加條件統計指定范圍,指定日期的日志情況.
- 書寫腳本自動完成上面統計.
3.1 去重統計ip數量
# 解壓壓縮包
[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 |head185611 220.181.51.57185542 220.181.51.4197735 220.181.51.5896784 220.181.51.4267199 61.135.165.3666686 61.135.165.466686 61.135.169.566679 61.135.165.4266650 61.135.165.3966541 61.135.169.6
3.2 去重統計第7列 用戶訪問的url的數量
[root@oldboy99-Kylin ~/oldboy]# TMPDIR=./tmp/ awk '{print $7}' 1000w-oldboy-lidao996-access.log |sort -T ./tmp/ |uniq -c |sort -k1nr -T ./tmp/ |head -521696 /favicon.ico1192 /446 /recv.cm.php?_fbnVsbCxMRy9VODEyMC92MS4w65 /new/images/grey.gif54 /new/css/css.css
3.3 去重統計第9列 狀態碼與數量
[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 20022541 40418193 49913464 502
3.4 添加條件統計指定范圍,指定日期的日志情況.
[root@oldboy99-Kylin ~/oldboy]# sed -n '/16:30:00/,/16:32:00/p' 1000w-oldboy-lidao996-access.log |wc -l
23454
3.5 書寫腳本自動完成上面統計
[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.57185542 220.181.51.4197735 220.181.51.5896784 220.181.51.4267199 61.135.165.3666686 61.135.165.466686 61.135.169.566679 61.135.165.4266650 61.135.165.3966541 61.135.169.6
去重統計url數量:21696 /favicon.ico1192 /446 /recv.cm.php?_fbnVsbCxMRy9VODEyMC92MS4w65 /new/images/grey.gif54 /new/css/css.css
去重統計狀態碼數量:
5042786 302
4902220 20022541 40418193 49913464 502
統計指定范圍的數據:
23454
4. 踩坑記錄
4.1 /bin和/usr/bin的關系(/sbin和/usr/sbin)?
- 硬鏈接,可以看到inode值相同
[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不同,是軟鏈接
[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