嘿,我试图从Ubuntu的python脚本运行一个cron作业时遇到一个问题。 这就是我所做的:
1.)写了一个简单的tkinter应用程序:源代码是从这个URL – http://www.ittc.ku.edu/~niehaus/classes/448-s04/448-standard/simple_gui_examples/sample.py
#!/usr/bin/python from Tkinter import * class App: def __init__(self,parent): f = Frame(parent) f.pack(padx=15,pady=15) self.entry = Entry(f,text="enter your choice") self.entry.pack(side= TOP,padx=10,pady=12) self.button = Button(f, text="print",command=self.print_this) self.button.pack(side=BOTTOM,padx=10,pady=10) self.exit = Button(f, text="exit", command=f.quit) self.exit.pack(side=BOTTOM,padx=10,pady=10) def print_this(self): print "this is to be printed" root = Tk() root.title('Tkwidgets application') app = App(root) root.mainloop()
2.)将脚本更改为可执行文件:
chmod 777 sample.py
3.)将脚本添加到我的cronjob中,以便每分钟运行一次以进行testing。 我打开crontab -e并将以下内容添加到我的文件中:
* * * * * /home/bbc/workspace/python/tkinter/sample.py
4.)免责声明:我没有添加任何额外的环境variables的tkinter也没有改变我的cronjob脚本/etc/init.d/cron
5.)我正在通过执行尾部-f / var / log / syslog来跟踪cron作业
$ tail -f /var/log/syslog Jul 7 18:33:01 bbc CRON[11346]: (bbc) CMD (/home/bbc/workspace/python/tkinter/sample.py) Jul 7 18:33:01 bbc CRON[11343]: (CRON) error (grandchild #11344 failed with exit status 1) Jul 7 18:33:01 bbc CRON[11343]: (CRON) info (No MTA installed, discarding output) Jul 7 18:33:01 bbc CRON[11342]: (CRON) error (grandchild #11346 failed with exit status 1) Jul 7 18:33:01 bbc CRON[11342]: (CRON) info (No MTA installed, discarding output)
任何帮助debugging这个问题将不胜感激…
我不确定你期望在这里发生什么。 cronjob将无法访问可显示GUI的显示器,因此该按钮将永远不会显示,因此print_this
将永远不会运行
FWIW,当我试图运行你的代码时,我得到一个错误:
File "./t.py", line 4 def __init__(self,parent): ^ IndentationError: expected an indented block
不知道如果这只是复制/粘贴到页面或如果它是一个真正的问题与您的代码。
在Linux的薄荷17我不得不做到以下几点:
使脚本可执行
〜$ chmod + x script.py
您必须启用X ACL以使localhost连接到GUI应用程序才能工作
〜$ xhost + local:
在crontab中添加以下行“env DISPLAY =:0.0”
* * * * * env DISPLAY =:0.0 / usr / bin / python /your-script-somewhere.py
还有一行crontab“> / dev / null 2>&1”
* * * * * env DISPLAY =:0.0 / usr / bin / python /your-script-somewhere.py> / dev / null 2>&1
你可以在/ var / log / syslog文件中检查错误
〜$ tail -20 / var / log / syslog
我使用crontab来运行一个bash文件
30 12 * * 1,2,3,4,5 /home/edward/SSF/SW/EODWD.sh
bash文件就像你希望的那样执行许多其他的程序
/home/edward/SSF/SW/EODWD.py >> /home/edward/Desktop/eodmail.log等待
这个例子也将EODWD.py中的所有打印语句自动发送到一个日志文件
等待声明在下一个命令之前强制竞争
这只适用于两个文件(* .py&* .sh)都可执行的情况