2

Я пытаюсь запустить кучу скриптов / команд каждый день.

Для этой цели я настроил анакрон пользовательского пространства, как описано здесь. Anacron запускается ежечасно cron:

содержимое /var/spool/cron/rawing:

@hourly /usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool

Это отлично работает. Однако мне не удалось запустить какие-либо графические приложения из моего анакронтаба. Я пробовал:

@daily 0 gui_test_env      env SCREEN=:0 zenity --info
@daily 0 gui_test_screen   SCREEN=:0 zenity --info

Оба из них терпят неудачу с сообщением об ошибке

Unable to init server: Could not connect: Connection refused

(zenity:6034): Gtk-WARNING **: cannot open display: 

Также

@daily 0 notify_test    SCREEN=:0.0 && notify-send "foobar"

не выдавал сообщения об ошибке, но не отображал уведомление. С другой стороны, сценарий Python, который отображает уведомления рабочего стола, не с сообщением

Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch=db6d4465f8584b8faa8abfb09b242b95 --binary-syntax --close-stderr': Child process exited with code 1 (1)

В случае, если это имеет значение, код Python выглядит так (сокращенно):

from gi.repository import Notify
Notify.init('test')
n= Notify.Notification.new('title', 'question', "dialog-question")
n.set_urgency(Notify.Urgency.NORMAL)
n.show()

Добавление xhost local:rawing > /dev/null в мой ~/.bashrc как здесь предлагается, тоже не помогло.


Обновление: мне удалось запустить приложения с графическим интерфейсом, используя DISPLAY=:0 XAUTHORITY=/home/rawing/.Xauthority some_gui_app . Однако уведомления на рабочем столе по-прежнему не работают. Ошибка:

Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files (2)

PS: Предложения о том, как сделать эту работу без анакрона, также приветствуются. Я думал, что анакрон сделает это легко ... оказывается, я был слишком оптимистичен.

1 ответ1

1

Работая с cron на NAS, я узнал, что непосредственное выполнение команд часто приводит к обратным результатам. Решением этой проблемы является создание сценария, который делает все внутренне. Затем пусть задача cron вызывает скрипт, который отлично работает. Это требует пары специальных действий.

  • Создайте сценарий (это может быть так же просто, как дополнительная строка #!bin/bash в первой строке
  • Используйте абсолютные пути для ВСЕГО (часто в среде cron нет путей в среде, если она вообще существует)

[править] Я понимаю, что здесь пропущены многие детали, представленные в посте с вопросом. Это несколько намеренно.

Немного проб и ошибок, вот что я получил на работу.

mkdir -p /home/username/bin/cron
nano -w /home/username/bin/cron/testscreen.sh

(в нано, вставьте следующее)

#!/bin/bash
/usr/bin/env SCREEN=:0 DISPLAY=:0 XAUTHORITY=/home/username/.Xauthority /usr/bin/zenity --info

Сохраните скрипт.

chmod +x /home/username/bin/cron/testscreen.sh
crontab -e 

Добавьте следующую строку, подгоняя время под ваши нужды.

20   8  *   *   *     /home/username/bin/cron/testscreen.sh

Главным образом, мне просто нужно было посмотреть назад и вперед из среды моего xterm в среду в cron и выяснить, какие ключевые части отсутствовали. Немного потрудились, чтобы cron-события запускались "через минуту" для тестирования, но я заставил его работать, поэтому он должен работать для вас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .