成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux腳本學習筆記,log函數使用技巧

系統 Linux
本文主要講述的是一個關于記錄shell腳本執行日志的日志腳本函數,在做shell腳本開發的過程中,常常要運行腳本來監測一些系統數據,但是我們又沒有很多時間來一直盯著命令控制臺看,所以看能不能把這些腳本運行的情況記錄成一個日志并保存下來,方便我們有時間的時候查看。

本文主要講述的是一個關于記錄shell腳本執行日志的日志腳本函數,在做shell腳本開發的過程中,常常要運行腳本來監測一些系統數據,但是我們又沒有很多時間來一直盯著命令控制臺看,所以看能不能把這些腳本運行的情況記錄成一個日志并保存下來,方便我們有時間的時候查看。

需求:

1、可以記錄腳本的運行情況

2、可以記錄時間

3、可以在輸入log達到一定的行數后對以前的log進行刪減,防止log文件無限累積

需求分析

需求很簡單,想想看好像有很多方式可以實現,最終結合個人喜好和技術能力,選擇編寫一個運行在shell腳本里面的函數;這個函數的作用是將shell腳本中需要輸出的日志信息,輸出成與腳本同名的log文本,記錄在系統中,方便開發人員在空閑時間進行查閱,分析腳本的運行情況。

需求實現:

經過三天三夜的奮戰,寫出了以下腳本函數:

#!/bin/bash
log(){
  #log文件名
  local fileName="./$(basename $0 .sh).log"
  #log文件最大存儲log行數(此處設置最大存儲log行數是100行)
  local fileMaxLen=100
  #超過log最大存儲行數后需要從頂部開始刪除的行數(此處設置的是刪除第1到第10行的數據)
  local fileDeleteLen=10
  if test $fileName
  then
    #記錄log
    echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
    #獲取log文件實際行數
    loglen=`grep -c "" $fileName`
    
    if [ $loglen -gt $fileMaxLen ]
    then
      #從頂部開始刪除對應行數的log
      sed -i '1,'$fileDeleteLen'd' $fileName
    fi
  else
    echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
  fi
}


#test
testdate=100
#記錄輸出的字符串
log "test string"
#記錄輸出的數據
log "testdate=$testdate"
#記錄輸出的運算
log $[1+2]
#記錄命令輸出的信息
log $(printf "this is cmd test %s\n" "this is cmd output string")

其中主要的就是log()這個腳本函數,'#test’之后的都是對這個函數的測試。

實現功能:

1、可以快速的加入到當前的腳本中,加入方法:將log()函數復制到在當前的腳本的最前面,然后后面對需要記錄的日志直接調用log就可以;

2、加入需要記錄日志的腳本后,執行腳本時,會在執行腳本同目錄下生成一個同名的.log文件,里面就是執行腳本的日志輸出;

3、可以記錄腳本運行時間及可對字符串、數據變量、及命令輸出的信息進行記錄;

4、可以對log文件的行數進行判斷,當行數超過最大限制行數后,會從log文件頂部開始刪除以前的log記錄。

使用示例:

比如要實時查看CPU的溫度,就有如下腳本(cputemp.sh):

#!/bin/bash
echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

在命令控制臺使用watch命令可以做到實時監控:

watch -n 1 ./cputemp.sh

執行結果如下:

這樣是可以實現實時查看,可是為了數據的延續性,所以我加上了log腳本函數,修改了cputemp.sh腳本,如下:

#!/bin/bash
log(){
  #log文件名
  local fileName="./$(basename $0 .sh).log"
  #log文件最大存儲log行數(此處設置最大存儲log行數是100行)
  local fileMaxLen=100
  #超過log最大存儲行數后需要從頂部開始刪除的行數(此處設置的是刪除第1到第10行的數據)
  local fileDeleteLen=10
  if test $fileName
  then
    #記錄log
    echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" >> $fileName
    #獲取log文件實際行數
    loglen=`grep -c "" $fileName`
    
    if [ $loglen -gt $fileMaxLen ]
    then
      #從頂部開始刪除對應行數的log
      sed -i '1,'$fileDeleteLen'd' $fileName
    fi
  else
    echo "[`date +%y/%m/%d-%H:%M:%S`]:$*" > $fileName
  fi
}




echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]
log $(echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000])

使用watch命令循環執行:

watch -n 1 ./cputemp.sh

執行在命令控制臺的結果和之前是一樣的,但是現在在同一個文件目錄下會生成一個cputemp.log的文件,查看該文件可以發現CPU的溫度信息已記錄。

使用cat命令查看cputemp.log:

cat ./cputemp.log

得到文件內容,如下:

從圖中可以看出CPU溫度在40-41之間波動。

注意事項

1、不能把watch命令寫到cputemp.sh腳本里面

這中間還是有一點不完善的地方是,不能把watch命令寫到cputemp.sh腳本里面是比較麻煩的,如果把watch命令寫到cputemp.sh腳本里面,就會出現執行的溫度信息被固定成一個固定值,不能做到實時查看。

如下:

修改的腳本:

#!/bin/bash
watch -n 1 echo CPU temperature is $[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

執行:

./cputemp.sh

執行結果:

從執行結果中可以看到:

$[`cat /sys/class/thermal/thermal_zone0/temp`/1000]

被固定成了40,導致每秒循環只是打印:

CPU temperature is 40

而不能達到效果,所以目前只能用命令調用腳本的方式了。

2、單引號內引用變量需要嵌套單引號

在使用 sed 命令時用到了單引號(‘’),單引號內需要引用變量時,需要對引用變量嵌套單引號,不然會報錯。

sed -i '1,'$fileDeleteLen'd' $fileName

總結:

目前這種實現方式也滿足了基本需求。

責任編輯:華軒 來源: 微技術之家
相關推薦

2010-08-31 16:35:59

CSS

2009-09-01 11:28:32

C#使用函數重載

2010-07-23 14:04:43

Perl grep函數

2010-09-26 14:01:10

JVM Log

2009-10-30 10:40:59

2011-08-19 15:16:41

XCodeUserScripts腳本

2011-08-08 14:57:46

iPhone Autoreleas Property

2010-07-20 10:58:39

Perl腳本

2010-07-21 14:18:27

Perl函數

2009-08-28 10:48:00

linux操作系統linux學習掃瞄

2011-08-19 15:48:13

SQL Server 結果集Sets使用技巧

2010-07-19 15:31:10

Perl關聯數組函數

2009-08-28 10:45:57

2009-08-28 10:57:42

linux操作系統linux學習目錄架構

2009-08-28 10:49:31

linux操作系統linux學習帳號管理

2009-08-28 10:51:21

linux操作系統linux學習SHELL

2009-08-28 10:53:57

linux操作系統linux學習VI

2016-11-08 15:33:58

Linuxchmod學習筆記

2019-08-14 08:03:49

LinuxShell腳本web服務

2009-11-30 09:21:39

PHP函數rmdir(
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久婷婷 | 日韩精品中文字幕一区二区三区 | 91资源在线| 北条麻妃视频在线观看 | 亚洲欧美中文日韩在线v日本 | 精品国产一区二区三区日日嗨 | 欧美中文字幕一区二区三区亚洲 | 亚洲欧美中文日韩在线 | 在线91| 一级大片免费 | 国产区一区二区三区 | 紧缚调教一区二区三区视频 | 国产高清精品一区二区三区 | 精品久久久一区二区 | 欧美一级艳情片免费观看 | 国产午夜精品一区二区三区嫩草 | 欧美中文字幕在线 | 99久久精品免费看国产免费软件 | 福利国产| 亚洲精品1 | 欧美精品一区二区三区在线四季 | 老外黄色一级片 | 精精精精xxxx免费视频 | 日日操网站 | 久久久久国产精品一区三寸 | 日本人和亚洲人zjzjhd | 午夜精品视频 | www.成人免费视频 | 亚洲视频一区在线观看 | 91精品一区 | 免费一区二区三区 | 最新中文字幕一区 | 99久久影院 | 日本成人二区 | 国产精品污污视频 | 日韩一区二区精品 | 亚洲综合视频 | 99热.com | 久草网在线视频 | 日韩在线中文字幕 | 久久久成人免费一区二区 |