Как использовать gnome-session-save из cron?

В основном для совместимости с различным программным обеспечением. Если вы устанавливаете приложение, которое хочет хранить файлы в /etc/rc.d/rc, но в вашем вкусе * nix нет /etc/rc.d/rc, ваше приложение будет жаловаться и, вероятно, не будет начать правильно. Таким образом, приложения могут хранить свои файлы в любом количестве относительно стандартных мест, и они, вероятно, будут найдены, когда система пойдет искать, где они ожидают.

0
23.08.2011, 11:42
4 ответа

Калеб был прав насчет передачи правильной переменной display. Я также использовал crontab -e вместо SUDOing. В Ubuntu все, что вам нужно сделать, это указать, какой дисплей передавать в Crontab. Таким образом, моя команда выглядит так:

00 18 * * * env DISPLAY=:0 gnome-session-save --kill

env DISPLAY=:0 - это то, что указывает передать cronjob на текущий дисплей (рабочий стол). В качестве альтернативы, если у вас несколько дисплеев, вы можете указать, на какой дисплей передавать команду, используя десятичную дробь (0.0 = дисплей 1, 0.1 = дисплей 2 и т.д.)

http://webcache.googleusercontent.com/search?q=cache:jdM1kg3ituMJ:https://help.ubuntu.com/community/CronHowto+https://help.ubuntu.com/community/CronHowto%23GUI%2520Applications&cd=1&hl=en&ct=clnk&gl=us&source=www.google.com

Да, я использовал веб-кэш google, потому что страница загружалась неправильно =D.

0
29.04.2021, 00:58

Во-первых, вы не должны использовать для этого sudo crontab -e . Это отредактирует файл crontab для пользователя root. Вам нужно это запустить в вашем пользовательском crontab, чтобы сохраненный сеанс gnome был вашим. Отбросьте sudo и просто запустите crontab -e . При необходимости добавьте себя в файл cron.allow , чтобы вы могли иметь файл crontab в качестве пользователя. (Также не забудьте снова отредактировать корневой каталог crontab и удалить эту запись.)

Во-вторых, вы не можете запускать такие вещи, как утилиты gnome из cron, не подключив их с правильными переменными $ DISPLAY . Среда, которую cron передает своим дочерним элементам, далеко не так совершенна, как оболочка входа в систему, и, поскольку она не работает в вашей графической среде входа в систему, она не связана с ней. Учтите это: возможно работать более чем в одной графической среде. Как системный сценарий узнает, над каким из них вы хотите работать? Это не так. Вам нужно выяснить, на каком ДИСПЛЕЕ он работает, и передать его своей команде.

Наконец, похоже, что это ВСЕ не место, чтобы делать это в любом случае. Зачем вам периодически убивать сеанс? Все, что пользователь делает в этом моменте, будет уничтожено. Также cron запускается вне зависимости от того, вошел ли пользователь в систему, поэтому ему не всегда есть над чем работать.

3
29.04.2021, 00:58

I файл, полученный подстановкой процесса, невозможно найти, в зависимости от базовой реализации, поэтому вы не можете прочитать его более одного раза.

-121--291648-

Согласно спецификациям Asus на этом коммутаторе, он способен только на 100 Мбит.
http://www.asus.com/Networks/Wired_Routers_Switches/GigaX1005/#specifications

5 RJ-45 для 10/100Mbps портов Ethernet

Также вы не можете установить порты в 1000 мегабит, о нем нужно автодоговориться.

-121--291631-

Я видел подобный вид ошибки. Если поместить только эту команду в сценарий оболочки, а затем просто добавить этот сценарий оболочки в cron, это сработает. Создайте что-то вроде killGnome.sh

#!/bin/sh
gnome-session-save --kill

Убедитесь, что предоставлены указанные выше разрешения на выполнение. И затем в ваш crontab добавить следующее:

00 00 * * * /path/to/killGnome.sh

Я не уверен, почему хотя.: | Изменения приветствуются.

-1
29.04.2021, 00:58

Как Павел Селиванов указывает в этой статье , необходимо установить DBUS_SESSION_BUS_ADDRESSи DISPLAY, чтобы включить задачи, связанные с графическим интерфейсом, из cronjob.

Он написал сценарий оболочки, который получает DBUS_SESSION_BUS_ADDRESSдля XFCE, Gnome, Unity, Cinnamon и KDE. Я могу подтвердить, что он работает под ubuntu:16.04.

$ sudo nano /usr/local/bin/gui-cron

#!/bin/sh
[ "$#" -lt 1 ] && echo "Usage: $0 program options" && exit 1

program="$1"
shift

user=$(whoami)
env_reference_process=$( pgrep -u "$user" xfce4-session || pgrep -u "$user" cinnamon-session || pgrep -u "$user" gnome-session || pgrep -u "$user" gnome-shell || pgrep -u "$user" kdeinit )

export DBUS_SESSION_BUS_ADDRESS=$(cat /proc/"$env_reference_process"/environ | grep -z ^DBUS_SESSION_BUS_ADDRESS= | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DISPLAY=$(cat /proc/"$env_reference_process"/environ | grep -z ^DISPLAY= | sed 's/DISPLAY=//')
"$program" "$@"

Затем можно создать пользовательское задание cron, которое запускается по заданному расписанию с помощью синтаксиса crontab. Здесь, например. каждые 15 минут с 22 :00 до 05 :59:

$ crontab -e

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/15 22-23,00-05 * * * gui-cron gnome-session-quit --power-off
0
29.04.2021, 00:58

Теги

Похожие вопросы