[Linux] 使用 cron job 執行 GUI 程式

[Linux] 使用 cron job 執行 GUI 程式

因為我們專案的程式是用 python 寫的,

在 build 之前我們都會先用 pylint 跑過,看看有沒有什麼明顯的問題~

為此,我就想在 Linux 的 cron job 裡面加一個排程工作,

定時跑一下 pylint,隨時看看程式有沒有問題~

 

可是 cron job 平常是在背景裡跑的, 這裡 pylint 有問題時看不到,

當然可以將 pylint 的結果輸出到檔案裡,但還是一樣,

我不可能一直去打開那檔案檢查有沒有問題…

希望的是跳出一個 terminal window,執行 pylint,

如果沒事就關掉,有問題就留著 pylint 的錯誤訊息…

 

幸好解法並不難,

Linux: Run cron job in foreground 上有說明如何讓 cron job 執行 GUI 程式~

下面就來實作一次吧~ 

 

1. 選擇要執行的 terminal window 程式

因為我要執行的是一個 python 程式(裡面會去跑 pylint),

因此我需要一個 terminal window 跳出來~

在 CentOS 6 上面預設的 terminal 是 GNOME terminal,

但是 gnome-terminal 好像沒辦法加參數讓它執行特定程式…

因此後來選擇的是 xterm,如果沒有安裝的話,可以用 yum 裝一下:

yum install xterm

 

2. 設定 xterm 的執行參數 

執行一下 xterm -h 看一下說明或上網查一下,調整一下需要的參數,

像下面我就調整了一下視窗標題、背景顏色、字型等等,

也設定了要使用 python 執行 ~/AutoPylint.py,先手動執行測試一下,

確認這個指令可以正確的叫出 xterm 並執行我們要的程式~

xterm -title Pylint -bg gray -fa monospace -fs 13 -e python ~/AutoPylint.py

 

我在 AutoPylint.py 裡面執行 pylint,

如果沒有問題的話程式結束,有問題的話用 read 這個指令等待使用者輸入,

這樣子就可以確保程式不會結束,terminal window 也就會留著:

read -t 3600 -p 'Press any key to continue... '

 

3. 讓 cron job 執行 xterm 指令

在要執行的程式前面加上 DISPLAY=:0 就可以讓 cron job 知道要讓程式在某個螢幕上顯示,

(如果有兩個螢幕的話,也許可以用 DISPLAY=:1 輸出到第二個螢幕,猜測 :P),

也可以細緻的指定 DISPLAY=:0,0 (或1, 2, …) 更深入的指定螢幕的某一個工作區 (但這我也沒試過)~

 

下面的例子是我在 cron job 中 (用 crontab -e 編輯),

指定在每一個小時,都執行一次 AutoPylint.py 這個程式:

0 * * * * DISPLAY=:0 xterm -title Pylint -bg gray -fa monospace -fs 13 -e python ~/AutoPylint.py

 

之後就可以每個小時,都看到下面的視窗跳出來跑 pylint 囉~~

AutoPylint  

 

//
//

(本頁面已被瀏覽過 915 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料