我最近一直在与crontab战斗,因为在Intrepid中gconftool使用dbus后端,这意味着当从crontab使用它时它不起作用.
为了使它工作,我必须在登录时导出相关的环境变量,以便在cron运行时找到dbus会话地址.
出于好奇,我想知道的cron什么样的环境能看到,它原来我所有的HOME
,LOGNAME
,PATH
,SHELL
,CWD
和我这个新的,XDG_SESSION_COOKIE
.这看起来好奇,几个谷歌搜索引发了一些错误或涉及它的其他功能请求但没有告诉我它做了什么.
我的直觉是,这个变量可以用来查找我必须导出到cron作业运行之前我来源的文件的所有内容.
因此,我的问题是a)我可以吗?b)如果是这样,怎么样?和c)它做了什么(别的)?
谢谢大家
这很有趣.我发现是显示管理器设置了一个cookie.那个可用于注册属于"会话"的进程,这些进程由一个被调用的守护进程管理ConsoleKit
.这是为了支持快速用户切换.我的KDE4.2.1系统显然也支持它.
阅读这个 fedora wiki条目.
所以这个环境变量就像DBUS_SESSION_BUS_ADDRESS
是可以访问某个实体(在XDG_SESSION_COOKIE
ConsoleKit管理的登录会话的情况下).例如,具有该环境变量,您可以向经理询问您当前的会话:
$ dbus-send --print-reply --system --type=method_call \ --dest=org.freedesktop.ConsoleKit \ /org/freedesktop/ConsoleKit/Manager \ org.freedesktop.ConsoleKit.Manager.GetCurrentSession method return sender=:1.1 -> dest=:1.34 reply_serial=2 object path "/org/freedesktop/ConsoleKit/Session1" $
Manager还支持查询某个进程所属的会话
$ [...].Manager.GetSessionForUnixProcess uint32:4494 method return sender=:1.1 -> dest=:1.42 reply_serial=2 object path "/org/freedesktop/ConsoleKit/Session1"
但是,它不会列出或以某种方式包含与某个cron
作业相关的变量.但是,文档dbus-launch
说libdbus
会自动找到合适的DBUS总线地址.例如,文件存储在/home/js/.dbus/session-bus
包含正确的当前dbus会话地址的文件中.