使用Python監控Mac一天的執行(上)

發表於2016-03-09

前言

一不小心寫成上下兩篇了.真是有些過意不去.畢竟,寫的太多就少了一部分讀者(少了一部分贊額).

之所以拆成上下兩篇,主要是因為在研究的過程中越發感到在一篇中強行植入那麼多的東西,自己的文章結構組織起來有些困難,對讀者來說,也是不容易理解.那倒不如拆分成兩部分.

任務分解

我的需求如此簡單,統計Mac上面一天的執行情況,然後在每天的下午六點把統計的情況彙總通過Email傳送給我.

用更加具體來說,就是,

隔一段時間使用Python指令碼,統計當前電腦的執行情況,CPU,記憶體,硬碟,網路使用狀況,然後在每天的下午六點通過Email把統計情況彙總,並且必須要有監控圖,並通過Email傳送給我的郵箱.

初看這玩意是挺簡單的,但是自己動手寫了以後就知道,其實還是稍微有些費時間的.

比如:

  • linux下面定時執行一個指令碼只需要crontab或者at以下就好了.mac上是是什麼?怎麼執行一個任務?
  • 統計的資料存哪兒?用什麼存?
  • 表格繪圖怎麼畫出來?
  • Email怎麼傳送,如果要傳送好看一點點的Email怎麼辦?

既然那麼多,那就分成兩篇,一篇用來介紹Mac上面的定時任務(簡單,短文),另一篇用Python來監控Mac電腦,並持久化監控資料,繪圖,彙總,傳送email.(稍微複雜一點,帶圖長文)

  • 上篇講在Mac上如何讓一個指令碼定時執行.
  • 下篇講如何寫一個Python監控指令碼.

本文結構

  • 前言
  • 本文結構
  • 為什麼需要定時任務?
  • Mac上面如何進行定時任務.
  • 疑問和解答
  • 擴充套件閱讀

為什麼需要定時任務?

所謂的定時任務,分為兩種:

  1. 指定時間執行的程式
  2. 每隔一段時間執行的程式

執行的內容,通常情況下和要做什麼事情有關,但是從內容上,分為兩種:

  1. 任務之間的資料沒有什麼關聯的
    • 比如,你想去抓一些資料(迅雷會員賬號)但是懶得自己動手,於是就寫了一個小指令碼,放在每天早上的8點鐘,去抓來賬號.
  2. 任務之間的資料有關聯的,甚至某種程度上可以繪製影象.
    • 比如,下一篇要說的使用Python監控自己的電腦情況,e.g:流量.隔一段時間就檢視一下自己的電腦執行情況,把情況存下來.甚至,在某個時間點,把結果彙總發給某個人.

Mac上面如何進行定時任務.

  • 首先,你要寫一個任務.
  • 其次,讓這個任務定時執行.

好,簡單的寫一個任務get_time.sh.

接著加上可執行.

那麼,怎麼讓Mac通過launchd隔一段時間就執行指令碼呢?

建立一個特殊的xml檔案叫做com.twocucao.apple.getdates.plist,給你所要執行的命令建立一個程式.

對於這個com.twocucao.apple.getdates隨你命名的,保證唯一就好.通常情況下選擇反轉域名(和Java程式設計類似),其他的,依照你的指令碼位置和間隔時間修改.

拷貝到LaunchDaemons,載入定時工作,然後檢查是否載入成功

由於這個指令碼實在是太弱智了僅僅是為了演示,所以,記得把他給解除安裝,刪除

疑問和解答

  • 問:為什麼要把指令碼的配置放在/Library/LaunchAgents呢?
  • 答:當然,你可以拷貝到其他的地方,
    • 如果你的需求是該使用者登入時候執行的話,那麼拷貝到:~/Library/LaunchAgents,這叫做User Agents.
    • 如果你的需求是該使用者登入時候執行的話,那麼拷貝到:/Library/LaunchAgents,這叫做Global Agents
    • 如果你的需求是讓Root使用者或者指定使用者登入時候執行的話,那麼拷貝到: /Library/LaunchDaemons ,這叫做Global Daemons
    • 如果你的需求是使用者登入執行,那麼拷貝到: /System/Library/LaunchAgents ,System Agents
    • 如果你的需求是讓Root使用者或者指定使用者登入時候執行的話,那麼拷貝到: /System/Library/LaunchDaemons,這叫做System Daemons.

user-agents是級別最低,其他所需許可權依次遞增.

  • 問:怎麼檢查任務執行結果?
  • 答:tail -f /Users/twocucao/Downloads/dates.txt
  • 問:如何確定launchd存在這個任務
  • 答: launchctl list
  • 問:既然是隔一段時間就能執行指令碼,那麼,我可以先用簡單的shell指令碼,配置好相關執行資訊,讓他定時執行,接著修改shell指令碼執行新的邏輯麼?
  • 答:可以.
  • 問:bash命令監控多麼方便,為何下一篇要使用Python作為監控工具.
  • 答:shell命令編寫程式碼不直觀,編寫效率低.Python有很好的第三方庫可以使用.

擴充套件閱讀(精選優質資料)

  1. 一個關於Linux命令的各種奇技的網站 http://www.commandlinefu.com/commands/browse
  2. Linux工具快速教程 http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html
  3. 關於launchd的參考連結,
  4. 命令列的藝術 https://github.com/jlevy/the-art-of-command-line

相關文章