我正在连接一个Python脚本,以便与cron一起运行(在Ubuntu 12.04上),但是身份验证不起作用。
cron脚本访问两个服务,并且必须提供凭据。使用keyring
存储这些凭据非常简单,只是当cron作业实际运行时,无法检索凭据。脚本每次都失败。
据我所知,这与cron运行的环境有关。我追踪了一组帖子,这些帖子表明关键是让脚本导出DBUS_SESSION_BUS_ADDRESS
。一切都很好,我可以很容易地获得该地址,导出它,并从Python中获取它。但它只是产生了一个新的错误:Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
。设置DISPLAY=:0
无效。
那么,有人知道如何从Ubuntu 12.04上运行在Cron作业上的Python中解锁gnome-keyring
吗?
3条答案
按热度按时间col17t5w1#
我很抱歉地说,我没有答案,但我想我知道一点是怎么回事基于一个问题,我正在处理。我试图让一个web应用程序和cron脚本使用一些代码,隐藏一个oauth令牌谷歌的API到一个keyring使用python-keyring。
不管我怎么做,运行web应用和cron作业的环境需要手动干预才能解锁keyring。当你的代码在非交互式会话中运行时,这是不可能的。当尝试我的研究中建议的一些技巧时,问题仍然存在,比如给进程所有者一个与keyring密码匹配的登录密码,并将keyring密码设置为空字符串。
我几乎可以保证你的错误源于Gnome-Keyring试图启动一个交互式(图形)提示和轰炸,因为你不能从cron中做到这一点。
rjee0c152#
安装钥匙串:
将其放入您的$HOME/.bash_配置文件:
它会在第一次登录时询问您的密码,并会存储您的凭据,直到下次重新启动。
将其插入到cron脚本的开头:
如果使用其他语言,如Python,请从 Package 器脚本调用它。
对我很有效,希望对你也有帮助。
bmp9r5qi3#
增加:
在crontab中列出的脚本的开头对我很有效。我仍然需要在启动后交互式地解锁一次keyring,但重新启动不频繁,所以它工作正常。
(from https://forum.duplicacy.com/t/cron-job-failed-to-get-value-from-keyring/1238/3)
因此,由cron运行的完整脚本将是:
使用来自conda的环境。或者将python调用更改为您设置python运行的方式。