首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cron Jobs能使用Gnome-Open吗?

Cron Jobs能使用Gnome-Open吗?
EN

Stack Overflow用户
提问于 2011-11-21 22:12:38
回答 2查看 1.6K关注 0票数 4

我正在运行Ubuntu11.10(),我创建了一个Bash脚本,它使用‘gnome’来打开每天早上使用的一系列网页。当我在终端中手动执行脚本时,bash脚本工作得很好。下面是脚本的一个示例(它是一样的,所以我缩短了它):

代码语言:javascript
复制
#!/bin/bash

gnome-open 'https://docs.google.com';
gnome-open 'https://mail.google.com'; 

由于它似乎运行良好,我在crontab (我的,而不是root的)中添加了一个作业,以便每个工作日在特定的时间执行。

以下是crontab条目:

代码语言:javascript
复制
30 10 * * 1,2,3,4,5 ~/bin/webcheck.sh

问题是,bash脚本中的每个'gnome-open‘命令都会返回此错误:

GConf -警告**:客户端未能连接到D-BUS守护进程:无法在没有$DISPLAY的X11 GConf错误的情况下自动引导dbus-守护进程:没有D总线守护进程运行错误:未指定显示。

我做了些调查来想办法解决这个问题。我尝试的第一件事是使用SIGHUP重新启动守护进程:

代码语言:javascript
复制
killall -s SIGHUP gconfd-2

这不起作用,所以我尝试使用dbus启动的手册页中的代码启动dbus-守护进程:

代码语言:javascript
复制
## test for an existing bus daemon, just to be safe
         if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
## if not found, launch a new one
         eval `dbus-launch --sh-syntax --exit-with-session`
         echo "D-Bus per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
         fi

但这没什么用。

我试着在bash脚本的顶部简单地添加“dbus- script”,但这也不起作用。

我还试着编辑crontab以包含到Bash的路径,因为我在另一个线程上看到了这个建议,但这不起作用。

有什么好办法让我把这件事办好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 12:16:24

这个问题是如何解决的。事实证明,这个问题主要是由Bash无法访问X窗口会话(或者至少我是这样理解的)造成的。因此,通过编辑crontab就可以解决我的问题:

代码语言:javascript
复制
30 10 * * 1,2,3,4,5 export DISPLAY=:0 && ~/bin/webcheck.sh

"export DISPLAY=:0“声明告诉cron使用哪种显示器。我在这个存档的Ubuntu论坛上找到了答案,我搜索了“没有指定的显示”或类似的内容:

http://ubuntuforums.org/archive/index.php/t-105250.html

所以现在,每当我登录,正好在10:30,我的系统将自动启动一系列的网页,我需要每天查看。省去了每次输入三个字母别名的艰难过程:)

票数 3
EN

Stack Overflow用户

发布于 2011-11-21 22:18:38

很高兴你这么问!

它取决于何时运行。

如果Gnome GDM Greeter处于活动状态,则可以使用登录对话框中的DBUS会话(如果愿意)。例如,如果没有人登录,您可以使用它向登录屏幕发送通知:

代码语言:javascript
复制
function do_notification
{
    for pid in $(pgrep gnome-session); do
        unset COOKIE
        COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ|cut -d= -f2-)"
        GNUSER="$(ps --no-heading -o uname $pid)"

        echo "Notifying user $GNUSER (gnome-session $pid) with '$@'"
        sudo -u "$GNUSER" DBUS_SESSION_BUS_ADDRESS="$COOKIE" /usr/bin/notify-send -c "From CRON:" "$@"
    done

    unset COOKIE
}

正如您可以看到的,上面的代码只是在所有可用的gnome会话上运行相同的命令(notify-send),当调用如下:

代码语言:javascript
复制
do_notification "I wanted to let you guys know"

你也许可以把它拆开,然后把它用于你自己的目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8219242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档