我正在尝试使用cron运行一个简单的python脚本,但我终生无法正常工作。我正在运行Ubuntu 18.04。
我知道对此有很多疑问(和答案)。我看过其中的一些,但仍然无法正常工作。
我的python脚本是:
#!/usr/bin/env python
from tkinter import messagebox
messagebox.showinfo('MessageBox','Hello world!')
我已遵循Unable to Run Python Script In Cron并按如下所示更改了权限:
chmod +x /home/brb/bugs/projects/cron/hello.py
我可以从命令行成功运行此代码,如下所示:
brb@bishop:~$ /home/brb/bugs/projects/cron/hello.py
在crontab内,我尝试按照以下两种不同方式执行脚本(每2或3分钟尝试确定一个有效的脚本...)
*/2 * * * * /home/brb/bugs/projects/cron/hello.py
*/3 * * * * /usr/bin/env python /home/brb/bugs/projects/cron/hello.py
什么都没发生。
我遵循http://www.jessicayung.com/automate-running-a-script-using-crontab/并尝试如下检查错误文件:
cd ../..
cd var/mail
nano $brb
我在nano上看到一条消息
[ Directory '.' is not writable ]
我不确定哪个目录为'。'是,也许是var / mail。无论如何,不确定如何使其可写。我猜想我会在google chmod上添加一些更多信息,以使它可写,但这仍然无法解决为什么cron在我看到的所有示例都看起来不起作用时无法正常工作...
编辑:
我按照How to run an X program from outside the X session (e.g. from the console or SSH)的三元组注释进行了操作,但由于并不真正知道自己在做什么,因此尝试更改显示权限,如下所示:
brb@bishop:~$ export XAUTHORITY=/home/brb/.Xauthority
brb@bishop:~$ export DISPLAY=':0'
我的cron工作仍然无法正常工作...
答案 0 :(得分:2)
您的问题有两个:
cronjob不知道它可以在哪里显示图形应用程序(要使用哪个X服务器或DISPLAY
。
可以通过确保在脚本环境中设置DISPLAY
来解决此问题。在X会话中运行的终端中运行echo $DISPLAY
。 :0
很可能。
即使知道正确的DISPLAY
,也确实(应该)无法访问它。如果您在与运行目标X会话的用户相同的用户下运行cronjob。如果它是其他用户,并且可以访问用户的家,则可以通过设置XAUTHORITY
指向它来重用它的授权文件。
您还可以从正在运行的会话中导出必要的信息(随每个会话更新),将其输入到该终端中:xauth list $DISPLAY
,然后将其添加给您的cron运行用户:xauth add displayname protocolname hexkey
(使用这三个信息) xauth list
返回的值。