crontab是和用戶相關的,每個用戶有自己對應的crontab 。
cron是Linux下的定時執行工具,以下是重啟/關閉等等的命令
#/sbin/service crond start //啟動服務 #/sbin/service crond stop //關閉服務 #/sbin/service crond restart //重啟服務 #/sbin/service crond reload //重新載入配置 #/sbin/service crond status //查看服務狀態
cron服務提供 crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:
crontab -u 設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l 列出某個用戶cron服務的詳細內容
crontab -r 刪除某個用戶的cron服務
crontab -e 編輯某個用戶的cron服務
設置定時的參數圖:
crontab特殊的符號說明:
"*" 代表所有的取值范圍內的數字。特別要注意哦!
"/" 代表每的意思,如"*/5"表示每5個單位
"-" 代表從某個數字到某個數字
"," 分散的數字
例如:
30 21 * * * 表示每晚的21:30
45 4 1,10,22 * * 表示每月1、10、22日的4 : 45
現在是正式代碼, 壓縮上一個月的日志,並把其刪除。
在logs文件夾的同級目錄下新建一個 .sh文件 例如:logzip.sh
內容:
echo "Please wait..." m=`date -d "1 months ago" +%Y-%m` #獲取上個月的yyyy-mm格式的日期字符串 m2=`date -d "1 months ago" +%Y%m` index=0 f=`ls /home/hls/apache-tomcat-7.0.61/logs -1 -c` #獲取logs下文件列表( /home/hls/apache-tomcat-7.0.61/logs 是日志的所在的路徑) for name in $f do n=`expr "$name" : '.*\([0-9]\{4\}-[0-9]\{2\}\).*'` #從文件名稱中提取yyyy-mm格式日期 if [ "$n" != "" ] && [ "$n" = "$m" ] then f[$index]="/home/hls/apache-tomcat-7.0.61/logs/$name" #logs文件夾下符合要求的文件名稱放入數組 else f[$index]="" fi (( index ++ )) done echo "$f" str=${f[@]} if [ "${#str}" -gt 0 ] #如果大於 0 then zip /home/hls/apache-tomcat-7.0.61/logs/$m2.zip $str #壓縮數組中的文件為yyyymm.zip文件,打包放在logs下 else echo "No files found." exit 0 fi echo "$m2.zip maked, now delete old files." rm -fr $str #刪除已被打包文件 echo "done." exit 0
使用方法:
執行 crontab -e 編輯當前用戶定時任務,進入編輯頁面,點擊 o ,輸入
0 0 1 * * /home/hls/apache-tomcat-7.0.61/logzip.sh >> /home/hls/apache-tomcat-7.0.61/crontablog.log 2>&1
按esc退出編輯 然后 :wq 保存退出。這樣就在crontab里設置了定時任務(每月一號凌晨執行logzip.sh,並把執行文件中的日志輸出在crontablog.log中)
注意:windows下面創建的文件回車符和linux/unix下面的回車符不一樣,可能會導致腳本無法執行,
------------------------------------------------------阿紀--------------------------------------------------------------