Могут ли Cron Jobs использовать Gnome-Open? - PullRequest
4 голосов
/ 22 ноября 2011

Я использую Ubuntu 11.10 (интерфейс Unity) и создал сценарий Bash, который использует «gnome-open» для открытия серии веб-страниц, которые я использую каждое утро. Когда я вручную выполняю скрипт в Терминале, скрипт bash работает просто отлично. Вот пример сценария (все то же самое, поэтому я сократил его):

#!/bin/bash

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

Так как это, казалось, работало хорошо, я добавил в свой crontab задание (мое, а не root), чтобы оно выполнялось каждый день недели в определенное время.

Вот запись в crontab:

30 10 * * 1,2,3,4,5 ~/bin/webcheck.sh

Проблема в том, что эта ошибка возвращается для каждой отдельной команды 'gnome-open' в скрипте bash:

GConf-WARNING **: клиенту не удалось подключиться к демону D-BUS: Невозможно запустить демон dbus без $ DISPLAY для X11 Ошибка GConf: демон D-BUS не работает Ошибка: дисплей не указан

Я попытался выяснить это. Первым делом я попытался перезапустить демон, используя SIGHUP:

killall -s SIGHUP gconfd-2

Это не сработало, поэтому я попытался запустить демон dbus, используя этот код на странице руководства для запуска dbus:

## 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

Но это ничего не сделало.

Я попытался добавить просто 'dbus-launch' в начало моего bash-скрипта, но это тоже не сработало.

Я также попытался отредактировать crontab, чтобы включить путь к Bash, потому что я видел это предложение в другом потоке, но это не сработало.

Любые идеи о том, как я могу получить это и работает?

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Вот как проблема была решена.Оказывается, проблема в основном была вызвана тем, что у Bash нет доступа к сеансу X Window (или, по крайней мере, я так понял).Таким образом, моя проблема была решена путем редактирования моего crontab следующим образом:

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 моя система автоматически запустит серию веб-страниц, которые мне нужно просматривать каждый день.Избавляет меня от необходимости каждый раз проходить трудный процесс ввода трехбуквенного псевдонима:)

2 голосов
/ 22 ноября 2011

Рад, что ты спросил!

Зависит от того, когда он запущен.

Если Gnom GDM Greeter активен, вы можете использовать сеанс DBUS из диалогового окна входа в систему, если хотите. Вы можете, например, использовать это для отправки уведомлений на экран входа в систему, если никто не вошел в систему:

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
}

Как видите, приведенный выше код просто запускает одну и ту же команду (notify-send) во всех доступных сеансах gnome, когда вызывается как:

do_notification "I wanted to let you guys know"

Вероятно, вы можете выделить это и использовать для своих собственных целей.

...