2012-06-13 106 views
1

我想成立一​​個cron作業運行一個python腳本,但它給了我這個錯誤:Cron作業:如何運行需要打開顯示的腳本?

RuntimeError: could not open display 

這是因爲我導入需要我打開顯示器模塊(pylab,例如)。即使我的腳本沒有生成任何圖片顯示在顯示器上。

有什麼辦法讓crontab運行我的作業,顯示打開(就好像我ssh -X進入一臺機器)?我實際上並不需要爲監視器生成任何圖表。我只需要正確導入我的模塊。

+3

請參閱http://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server – NPE

+0

@aix我必須直接使用matplotlib API嗎?我寧願使用pylab ..一般來說,有沒有辦法在crontab中解決這個問題? – CodeNoob

+0

如果添加'import matplotlib as mpl; mpl.use('Agg')'在腳本的頂部(在導入'pylab'之前),這可能會解決問題。 – NPE

回答

1

您需要一個有效的DISPLAY和XAUTHORITY才能在Cron中使用X-Programms!

要設置顯示非常簡單,鍵入擊:

export DISPLAY=":0.0" 

爲了讓你不得不尋找一個有效的XAUTHORITY。 在Debian/GNOME/gdm3它們被保存在var/run中/ gdm3/* /數據庫 我用下面的腳本:

export DISPLAY=":0.0" 
[ -z $USER ] && USER=$(who | awk '{ print $1 }' | sort | uniq >/tmp/test) 
for I in /var/run/gdm3/*; do 
    AUTHUSER="`echo $I | awk -F '-' '{ print $3 }'`" 
    for J in $USER; do 
     [ "${AUTHUSER}" = "${J}" ] || continue 
     USER="$J" 
     export XAUTHORITY="${I}/database" && break 
    done 
done 
sudo -u ${USER} /Path/to/xProgramm 

了var $ USER可以是空的,比劇本尋找一個有效的用戶,否則你可以告訴腳本var!

0

您也可以只使用xvfb或類似的工具你在一個幀緩衝區的應用程序:

Downloadsudo apt-get install xvfb

用法:

xvfb :1 -screen 0 800x600x8 & # WIDTHxHEIGHTxCOLORDEPTH 
export DISPLAY=":1" 
java application_name.jar 

或更短:

xvfb-run -a -e /tmp/some/log/file.log /home/user/application.run 

-a自動選擇顯示號碼,-e file指定錯誤消息的日誌文件。