试图从ubuntu crontab运行python脚本

时间:2013-07-08 01:35:53

标签: python ubuntu cron tkinter

嘿我在尝试使用ubuntu的python脚本运行cron作业时遇到了问题。这就是我所做的:

1。)写了一个简单的tkinter应用程序:代码的来源来自这个网址 - 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中,每分钟运行一次以进行测试。我打开了crontab -e并将以下内容添加到我的文件中:

 * * * * * /home/bbc/workspace/python/tkinter/sample.py 

4.。)免责声明:我没有为tkinter添加任何其他环境变量,也没有在/etc/init.d/cron上更改我的cronjob脚本

5.)我通过执行tail -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)

任何有关调试此问题的帮助都将非常感谢......

3 个答案:

答案 0 :(得分:3)

我不确定你期望在这里发生什么。 cronjob无法访问显示GUI的显示,因此永远不会显示该按钮,因此永远不会运行print_this

FWIW,当我尝试运行您的代码时出现错误:

  File "./t.py", line 4
    def __init__(self,parent):
      ^
IndentationError: expected an indented block

不确定这是否仅仅是由于复制/粘贴到网页中造成的,或者是否是代码的真正问题。

答案 1 :(得分:2)

在linux mint 17中,我必须执行以下操作:

使脚本可执行
〜$ chmod + x script.py

您必须为localhost启用X ACL才能连接到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

更多信息:
https://help.ubuntu.com/community/CronHowto

答案 2 :(得分:1)

我使用crontab运行bash文件

30 12 * * 1,2,3,4,5 /home/edward/SSF/SW/EODWD.sh

in termanal - 使用crontab -e

bash文件执行任意数量的其他程序

/home/edward/SSF/SW/EODWD.py>> /home/edward/Desktop/eodmail.log 等待

此示例还将EODWD.py中的所有打印语句自动发送到日志文件

在获取下一个命令之前,等待语句强制竞争

仅当两个文件(* .py& * .sh)都可执行时才能正常工作