標籤:指令碼 bash 需求 logfile 日誌 linux screen
需求:公司某背景程式是在screen下執行的,只能通過恢複到視窗進行查看並且無法查看全部資訊;由於更新背景程式後需要重啟後台,通過查看背景程式的執行過程來判斷此次更新是否成功,現需要將背景程式的screen運行資訊列印到日誌,並提供給開發人員調試。
實現思路:1.將screen日誌輸出到某檔案,並給開發人員開通讀檔案許可權;
2.將日誌名稱加上時間,以通過日誌名稱就可輕易辨認後台是否重啟成功;
3.每次重啟後台都要將原日誌刪除,以便節省空間的並重建帶有時間的日誌名
實現過程:
要點:1.更改screen設定檔/etc/screenrc 在最後加上一行logfile /root/screenlog/%t-20140905-163549.log
2.啟動screen命令 需要加上相關參數
/usr/bin/screen -L -t aa1-dmS aa1 ./aa1
這裡我一指令碼的方式實現,記錄檔名字會根據時間產生。
#!/bin/bashexport LANG=zh_CN.UTF-8declare -i portkillall screenrm -rf /root/screenlog/*.logecho "logfile /root/screenlog/%t-`date +%Y%m%d-%H%M%S`.log" >> /opt/sjzq/screenrc_temp\cp -rf /opt/sjzq/screenrc_temp /etc/screenrcfor i in `seq 1 6`do n=`pgrep aa$i |wc -l` if [ $n -eq 0 ];then cd /fb$i /usr/bin/screen -L -t aa$i -dmS aa$i ./aa$i >/dev/null 2&1 fidonesed -i '$d' /opt/sjzq/screenrc_temp
每次執行guard1.sh,會重啟screen,我們看到會在/root/screenlog下產生以會話名稱+時間組合而成的日誌,這樣根據時間我們可以判斷日誌重啟,並能夠查看相關日誌了.
[[email protected] sjzq]# bash guard1.sh [[email protected] sjzq]# ls /root/screenlog/aa1-20140905-165056.log aa2-20140905-165056.log aa3-20140905-165056.log aa4-20140905-165056.log aa5-20140905-165056.log aa6-20140905-165056.log[[email protected] sjzq]# bash guard1.sh[[email protected] sjzq]# ls /root/screenlog/aa1-20140905-165127.log aa2-20140905-165127.log aa3-20140905-165127.log aa4-20140905-165127.log aa5-20140905-165127.log aa6-20140905-165127.log
linux screen列印日誌