用crontab執行shell把top命令按日期追加到文件 詳細圖文解說請到本人原創百度經驗
http://jingyan.baidu.com/article/3052f5a1daf11197f21f8648.html
解決crontab定時輸出top不執行辦法
top -n 1不能在 crontab中使用,要加一個參數top -b -n 1
需求:在linux服務器用crontab執行shell基本把top命令結果按日期追加到文件。
常見問題:1.直接執行命令可以正常,放到shell腳本里面執行不行。
2.直接執行shell腳本正常輸出,放到crontab后不行。
本文列出crontab和直接執行命令的差別、shell定義環境變量、linux獲取當前日期、crontab每分鍾執行一次、實時監控是否有輸出內容、寫入內容和追加內容的區別等相關知識點,並給出自己測試成功的實例和截圖。
工具/原料
linux
方法/步驟
1
crontab默認是沒有環境變量的,也不能直接使用相對路徑
直接在命令行執行 就是在當前的shell環境下執行
腳本執行的時候 會fork一個子進程 所有操作都在子進程進行
crontab執行的shell腳本命令要用絕對路徑
例如:/usr/bin/top -b -d 1 -n 1 >> /usr/mydoc/test.txt
2
shell 中變量的定義:linux shell腳本定義變量采用key=value方式,一行一個,字符串用""雙引號,讀取采用$key的方式。
例如:NAME="/root/top_"$(date +%Y-%m-%d) 就是定義一個前綴加當前日期的文件名。
3
單獨top命令不會自動退出,shell腳本必須要能夠自動退出才會些數據到文件里面,所以一定要先單獨測試會自動退出的帶參數的top命令才行。
例如:輸入top -b -d 1 -n 3 >test.txt
表示:每一秒更新一次,一共記錄3次 將進程信息寫入test.txt文件中
需要執行一次就退出改成/usr/bin/top -b -d 1 -n 1 >test.txt
注:內容寫入文件是>,會清空以前的內容的,追加內容是>>
4
創建一個toptest.sh腳本,內容為:
#!/bin/sh
NAME="/root/top_"$(date +%Y-%m-%d)
/usr/bin/top -b -d 1 -n 1 >> $NAME.txt
給sh腳本執行權限命令:chmod +x toptest.sh
如下圖所示:
5
crontab每分鍾執行一次的寫法:*/1 * * * * /bin/bash /root/sh/toptest.sh
編輯命令是crontab -e,注意命令前面要加上/bin/bash 。
生效后用到文件目錄下執行:tail -f top_2014-02-19.txt 可以實時監控是否有輸出內容。如果沒有輸出內容說明腳本有問題需要修改,主要是保證top后面的參數正常,效果如圖所示:
END
注意事項
crontab默認是沒有環境變量的,也不能直接使用相對路徑
單獨top命令不會自動退出,shell腳本必須要能夠自動退出才會些數據到文件里面
命令前面要加上/bin/bash
