我正在使用cron(在Ubuntu 12.04上)运行python脚本 - 很简单。除了身份验证。
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?
答案 0 :(得分:2)
我很遗憾地说我没有答案,但我想我知道一些基于我正在处理的问题的事情。我尝试使用Web应用程序和cron脚本来使用一些代码,这些代码使用python-keyring将Google的oauth令牌存储到密钥环中。
无论我做什么,Web应用程序和cron作业运行的环境都需要手动干预来解锁密钥环。当您的代码在非交互式会话中运行时,这是非常不可能的。在尝试我的研究中提出的一些技巧时,问题仍然存在,例如向进程所有者提供与密钥环密码匹配的登录密码,并将密钥环密码设置为空字符串。
我几乎可以保证你的错误源于Gnome-Keyring试图启动交互式(图形)提示和轰炸,因为你无法从cron那里做到这一点。
答案 1 :(得分:0)
安装钥匙串:
sudo apt-get install keychain
将它放入$ HOME / .bash_profile:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
fi
eval `keychain --eval id_rsa`
首次登录时会询问您的密码,并会在下次重启之前存储您的凭据。
将其插入cron脚本的开头:
source $HOME/.keychain/${HOSTNAME}-sh
如果您使用其他语言,例如python,请从包装器脚本调用它。
它对我有用,我希望它对你也有帮助。