В основном для совместимости с различным программным обеспечением. Если вы устанавливаете приложение, которое хочет хранить файлы в /etc/rc.d/rc, но в вашем вкусе * nix нет /etc/rc.d/rc, ваше приложение будет жаловаться и, вероятно, не будет начать правильно. Таким образом, приложения могут хранить свои файлы в любом количестве относительно стандартных мест, и они, вероятно, будут найдены, когда система пойдет искать, где они ожидают.
Калеб был прав насчет передачи правильной переменной 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 и т.д.)
Да, я использовал веб-кэш google, потому что страница загружалась неправильно =D.
Во-первых, вы не должны использовать для этого sudo crontab -e
. Это отредактирует файл crontab для пользователя root. Вам нужно это запустить в вашем пользовательском crontab, чтобы сохраненный сеанс gnome был вашим. Отбросьте sudo и просто запустите crontab -e
. При необходимости добавьте себя в файл cron.allow
, чтобы вы могли иметь файл crontab в качестве пользователя. (Также не забудьте снова отредактировать корневой каталог crontab и удалить эту запись.)
Во-вторых, вы не можете запускать такие вещи, как утилиты gnome из cron, не подключив их с правильными переменными $ DISPLAY
. Среда, которую cron передает своим дочерним элементам, далеко не так совершенна, как оболочка входа в систему, и, поскольку она не работает в вашей графической среде входа в систему, она не связана с ней. Учтите это: возможно работать более чем в одной графической среде. Как системный сценарий узнает, над каким из них вы хотите работать? Это не так. Вам нужно выяснить, на каком ДИСПЛЕЕ он работает, и передать его своей команде.
Наконец, похоже, что это ВСЕ не место, чтобы делать это в любом случае. Зачем вам периодически убивать сеанс? Все, что пользователь делает в этом моменте, будет уничтожено. Также cron запускается вне зависимости от того, вошел ли пользователь в систему, поэтому ему не всегда есть над чем работать.
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
Я не уверен, почему хотя.: | Изменения приветствуются.
Как Павел Селиванов указывает в этой статье , необходимо установить 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