我想成立一個cron作業運行一個python腳本,但它給了我這個錯誤:Cron作業:如何運行需要打開顯示的腳本?
RuntimeError: could not open display
這是因爲我導入需要我打開顯示器模塊(pylab
,例如)。即使我的腳本沒有生成任何圖片顯示在顯示器上。
有什麼辦法讓crontab運行我的作業,顯示打開(就好像我ssh -X
進入一臺機器)?我實際上並不需要爲監視器生成任何圖表。我只需要正確導入我的模塊。
我想成立一個cron作業運行一個python腳本,但它給了我這個錯誤:Cron作業:如何運行需要打開顯示的腳本?
RuntimeError: could not open display
這是因爲我導入需要我打開顯示器模塊(pylab
,例如)。即使我的腳本沒有生成任何圖片顯示在顯示器上。
有什麼辦法讓crontab運行我的作業,顯示打開(就好像我ssh -X
進入一臺機器)?我實際上並不需要爲監視器生成任何圖表。我只需要正確導入我的模塊。
您需要一個有效的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!
請參閱http://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server – NPE
@aix我必須直接使用matplotlib API嗎?我寧願使用pylab ..一般來說,有沒有辦法在crontab中解決這個問題? – CodeNoob
如果添加'import matplotlib as mpl; mpl.use('Agg')'在腳本的頂部(在導入'pylab'之前),這可能會解決問題。 – NPE