Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python, Keyring, and Cron

I'm hooking a python script up to run with cron (on Ubuntu 12.04) -- easy enough. Except for authentication.

The cron script accesses a couple services, and has to provide credentials. Storing those credentials with keyring is easy as can be -- except that when the cron job actually runs, the credentials can't be retrieved. The script fails out every time.

As nearly as I can tell, this has something to do with the environment cron runs in. I tracked down a set of posts which suggest that the key is having the script export DBUS_SESSION_BUS_ADDRESS. All well and good -- I can get that address and, export it, and source it from Python fairly easily -- but it simply generates a new error: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11. Setting DISPLAY=:0 has no effect.

So. Has anybody figured out how to unlock gnome-keyring from Python running on a cron job on Ubuntu 12.04?

like image 912
Gastove Avatar asked Jan 07 '14 18:01

Gastove


1 Answers

I'm sorry to say I don't have the answer, but I think I know a bit of what's going on based on an issue I'm dealing with. I'm trying to get a web application and cron script to use some code that stashes an oauth token for Google's API into a keyring using python-keyring.

No matter what I do, something about the environment the web app and cron job runs in requires manual intervention to unlock the keyring. That's quite impossible when your code is running in a non-interactive session. The problem persists when trying some tricks suggested in my research, like giving the process owner a login password that matches the keyring password and setting the keyring password to an empty string.

I will almost guarantee that your error stems from Gnome-Keyring trying to fire up an interactive (graphical) prompt and bombing because you can't do that from cron.

like image 110
David Eads Avatar answered Sep 29 '22 11:09

David Eads