服務部署到SAE后,會面臨日志清理的問題。不同技術棧語言應用的處理方案不同。例如,Java應用可以設置日志輪轉達到自動清理的效果。但一些其他語言的應用,例如PHP,不帶日志清理輪轉的框架。此外,還有部分應用因為特殊原因無法設置輪轉。這些應用都需要對應的方案自動清理程序日志。本文以CentOS和Debian操作系統為例,介紹如何通過SAE控制臺配置程序的日志清理。
實施方案
通過SAE控制臺的自定義運行環境設置,安裝并配置Crontab,達到定期清理的目的。您可以在創建或者部署應用時,填寫自定義運行環境設置的相關參數。下圖以ZIP包部署的PHP應用為例。
本文僅介紹關鍵步驟,關于配置路徑的更多信息,請參見設置代碼包運行環境。
操作步驟
CentOS按最后操作時間清理
以下示例為每小時執行一次,對最后修改時間大于7天、以.log結尾的文件進行刪除操作。
安裝Crontab。
#!/bin/bash set -o errexit set -o nounset set -o pipefail yum install -y crontab
添加待執行的定時任務表達式和命令。
echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;">>/etc/crontab
重要寫入到/etc/crontab目錄的內容中,一定要攜帶用戶名(本示例為root)。
啟動Crontab。
展開應用生命周期管理設置區域,在啟動后處理(PostStart設置)頁簽,輸入Crontab的啟動命令。
/sbin/crond start
Debian按最后操作時間清理
以下示例為每小時執行一次,對最后修改時間大于7天、以.log結尾的文件進行刪除操作。
安裝Crontab。
#!/bin/bash set -o errexit set -o nounset set -o pipefail apt-get update apt-get install -y cron
添加待執行的定時任務表達式和命令。
echo "0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;">>/etc/crontab
重要寫入到/etc/crontab目錄的內容中,一定要攜帶用戶名(本示例為root)。
啟動Crontab。
展開應用生命周期管理設置區域,在啟動后處理(PostStart設置)頁簽,輸入Crontab的啟動命令。
service cron start
Crontab參數說明
CentOS按最后操作時間清理和Debian按最后操作時間清理這兩個操作系統的Crontab命令行設置,都是通過echo命令,將Crontab的指令追加到/etc/crontab文件中。以下列命令為例,介紹配置過程中涉及的指令。
0 * * * * root find /home/admin/logs/* -mtime +7 -name '*.log' -exec rm -rf {} \;
0 * * * *
:Crontab執行時間的表達式。更多信息,請參見Crontab表達式說明。root
:設定執行的賬戶。其余部分為要執行的指令,表示找到/home/admin/logs目錄下所有文件,并刪除其中超過7天未發生修改的文件。
-mtime
表示天,-mmin
表示分鐘。
文件清空清理
針對一些不會實現日志文件輪轉的場景,可以直接清空文件內容。對于CentOS和Debian系統,安裝和設置Crontab的方式和上文一致。以下示例僅介紹如何編寫Crontab命令。
yes | cp /dev/null /home/admin/logs/demo.log
其中絕對路徑/home/admin/logs/demo.log可以按需修改。
Crontab表達式說明
格式如下:
f1 f2 f3 f4 f5 program
其中f1
表示分鐘,f2
表示小時,f3
表示一個月份中的第幾日,f4
表示月份,f5
表示一個星期中的第幾天,program
表示要執行的程序。
當f1
為*
時,表示每分鐘都要執行program
,f2
為*
時,表示每小時都要執行程序,以此類推。
常見的Crontab表達式如下。
執行時間 | 格式 |
每分鐘定時執行一次 | * * * * * |
每小時定時執行一次 | 0 * * * * |
每天定時執行一次 | 0 0 * * * |
每周定時執行一次 | 0 0 * * 0 |
每月定時執行一次 | 0 0 1 * * |
鏡像補充
如果以鏡像方式部署的應用,需要使用自定義運行環境設置的方式清理日志,您需要自行安裝和啟動Crontab命令,并將鏡像源替換成阿里云的內網源。關于替換內網源的具體操作,請參見CentOS鏡像。