Ubuntu 18.04下Cron无法运行Python Tkinter脚本求助
解决Cron运行带tkinter的Python脚本失败的问题
首先,你的核心问题在于:Cron默认运行在无图形界面的环境中,而你的Python脚本依赖tkinter的GUI组件(messagebox),需要X服务器的支持,同时Cron不会自动继承你登录shell的环境变量。下面一步步帮你解决:
1. 为Cron配置GUI所需的环境变量
你之前在shell里执行export XAUTHORITY和export DISPLAY只是临时生效,Cron任务不会继承这些变量,必须直接写到crontab里:
方法一:在crontab开头定义全局环境变量
编辑你的crontab(执行crontab -e),在最顶部添加两行:
DISPLAY=:0 XAUTHORITY=/home/brb/.Xauthority
然后保留你的任务:
*/2 * * * * /home/brb/bugs/projects/cron/hello.py
方法二:在任务命令中直接指定环境变量
如果不想全局设置,也可以把环境变量写在任务命令前:
*/2 * * * * DISPLAY=:0 XAUTHORITY=/home/brb/.Xauthority /home/brb/bugs/projects/cron/hello.py
2. 正确查看Cron的错误日志
你之前查看日志的方式有误,正确的做法有两种:
- 查看系统邮件:直接执行
cat /var/mail/brb就能看到Cron发送的任务日志,如果提示权限问题,用sudo cat /var/mail/brb(输入你的用户密码即可)。 - 重定向日志到自定义文件:修改crontab任务,把输出和错误都写到指定文件,方便排查:
之后查看日志只需执行*/2 * * * * DISPLAY=:0 XAUTHORITY=/home/brb/.Xauthority /home/brb/bugs/projects/cron/hello.py >> /home/brb/cron_hello.log 2>&1cat /home/brb/cron_hello.log。
3. 额外的检查点
- 确认脚本的shebang是否匹配你的Python版本:Ubuntu 18.04中
python默认指向Python2,如果你是用Python3编写的脚本,建议把shebang改成#!/usr/bin/env python3(不过你说命令行能运行,这一步可能没问题,但可以确认下)。 - 确保你的用户有权限访问X服务器:在shell中执行
xhost +local:brb,允许本地用户brb访问X服务器,然后再等待Cron任务执行测试。
内容的提问来源于stack exchange,提问作者brb
相关产品推荐
相关产品推荐

