Linux 使用 crontab 定時拆分日誌、清理過期檔案

南国以南i發表於2024-04-08

@

目錄
  • 前言
  • 簡介
  • 一、準備工作
    • 1.1 建立寫入指令碼
    • 1.2 設定執行許可權
    • 1.3 新增定時任務
    • 1.4 配置生效
  • 二、Tomcat日誌 按每天分割
    • 2.1 建立一個 sh檔案
    • 2.2 設定執行許可權
    • 2.3 設定crontab指令,指定每日定時任務
    • 2.4 配置生效
  • 總結


前言

請各大網友尊重本人原創知識分享,謹記本人部落格:南國以南i


提示:以下是本篇文章正文內容,下面案例可供參考

簡介

在Linux中可以使用crontab來定時執行指令碼。crontab是一個用於管理定時任務的工具,可以讓在特定的時間間隔內自動執行指令碼或命令。

需求: 在Linux中每分鐘寫入一條資訊到指定檔案中,使用cron來定期執行一個寫入命令或指令碼

在Linux中,定時執行指令碼具有多種作用和用途,包括但不限於以下幾個方面:

  1. 自動化任務:定時執行指令碼可用於自動化重複性的任務。例如,定時備份資料、定時清理臨時檔案、定時執行系統維護任務等。透過將這些任務指令碼定期執行,可以減輕管理員的工作負擔,並確保任務按計劃執行,提高系統的可靠性和穩定性。
  2. 監控和報告:定時執行指令碼可用於監控系統狀態、資源使用情況和日誌檔案,並生成相應的報告。例如,定時檢查伺服器的CPU使用率、磁碟空間佔用情況、網路連線狀態等,並將報告傳送給管理員或其他相關人員。這樣可以幫助及時發現問題並採取適當的措施。
  3. 資料處理和分析:定時執行指令碼可用於處理和分析資料。例如,定期從外部資料來源獲取資料,並將其匯入到資料庫中進行進一步處理和分析。這對於資料採集、資料清洗、資料轉換和資料分析等任務非常有用。
  4. 定時提醒和通知:定時執行指令碼可用於生成提醒和通知。例如,定時傳送電子郵件或簡訊提醒,以及生成日程安排或事件提醒。這對於個人、團隊或組織來管理任務、安排會議或傳送重要通知非常有幫助。
  5. 自定義批處理任務:定時執行指令碼可用於執行自定義的批處理任務。根據特定的需求和工作流程,你可以編寫指令碼來執行一系列操作,如檔案處理、資料轉換、編譯構建等。透過定時執行這些指令碼,可以簡化複雜的工作流程並提高工作效率。

總之,定時執行指令碼在Linux系統中具有廣泛的應用。透過利用定時任務,可以實現自動化、監控、報告、資料處理等各種任務,從而提高系統的可靠性、效率和管理效果

一、準備工作

1.1 建立寫入指令碼

注意:首先,在home目錄下建立一個名為testscript.sh的指令碼檔案,並新增以下內容:

 #!/bin/bash
echo "This is a log message $(date)" > /home/out.log

在這個示例中,指令碼會將一條帶有當前日期和時間的日誌訊息附加到指定的日誌檔案中。確保將/home/out.log替換為實際的日誌檔案路徑。

儲存並關閉檔案。

1.2 設定執行許可權

注意:在執行指令碼之前,確保為其設定執行許可權。在終端中執行以下命令:

chmod 755 /home/testscript.sh

1.3 新增定時任務

crontab表的每一行代表一個定時任務,定時任務語法格式如下:

* * * * * command
 
第一個*表示分鐘數(0-59)
第二個*表示小時數(0-23)
第三個*表示一個月中的第幾天(1-31)
第四個*表示月份(1-12)
第五個*表示一週中的第幾天(0-7,0和7都表示星期日)
command是要執行的命令或指令碼

例如,要在每天的凌晨12點執行指令碼,新增以下行到cron表中:
我們可以在 Crontab 的命令中新增重定向符號 ">>" 將輸出重定向到指定的檔案中。例如:

crontab -l # 檢視當前是否存在任務
crontab -e # 編輯 指定執行哪個指令碼以及執行時間

# 每日凌晨執行指令碼
0 0 * * * /home/testscript.sh >> /home/testscript.log 2>&1     

1.4 配置生效

service crond reload    //重新載入配置  前提是crond已經啟動

二、Tomcat日誌 按每天分割

2.1 建立一個 sh檔案

建立指令碼

#建立指令碼
vim auto-deal-log.sh

指令碼內容:

#! /bin/bash
echo "date is `date +%Y-%m-%d,%H:%M:%S`"
echo "tomcat-sca日誌分割"
sca_log_path=/home/admin/sca/tomcat-sca/logs
cp $sca_log_path/catalina.out $sca_log_path/catalina.`date +%Y-%m-%d`.log

# 清空tomcat預設日誌輸出檔案
echo "" > $sca_log_path/catalina.out

echo "nginx日誌分割"
nginx_log_path=/home/admin/mid/nginx/logs
cp $nginx_log_path/access.log $nginx_log_path/access.`date +%Y-%m-%d`.log
cp $nginx_log_path/error.log $nginx_log_path/error.`date +%Y-%m-%d`.log
echo "" > $nginx_log_path/access.log
echo "" > $nginx_log_path/error.log


# 查詢並清理不需要的檔案
echo "清理tomcat*,保留30天"
find /home/admin/sca/tomcat*/logs/ -mtime +30 -name "*" -exec rm -rf {} \;
echo "清理batch日誌,保留30天"
find /home/admin/sca/log/batch/ -mtime +30 -name "*" -exec rm -rf {} \;
echo "清理xxl-job日誌,保留7天"
find /home/admin/sca/log/xxl-job/ -mtime +7 -name "*" -exec rm -rf {} \;
echo "清理auto-split-deal-log日誌,保留7天"
find /home/admin/sca/log/auto-split-deal-log/ -mtime +7 -name "*" -exec rm -rf {} \;
echo "清理影片檔案,保留5天"
find /home/admin/sca/ccrecord/ -mtime +5 -name "*.wev" -exec rm -rf {} \;
echo "日誌分割及清理完畢"

2.2 設定執行許可權

chmod +x auto-deal-log.sh

2.3 設定crontab指令,指定每日定時任務

# 每日凌晨執行分割日誌指令碼
0 0 * * * /opt/sh/auto-deal-log.sh  >> /path/to/auto-deal-log.log 2>&1   

2.4 配置生效

service crond reload    //重新載入配置  前提是crond已經啟動

總結

我是南國以南i記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文連結!!!

相關文章