Выполнение .sh каждые 5 минут

11

У меня есть сценарий .sh, который загружает фотографию с сервера японского спутника и устанавливает ее как фоновое изображение. Я поместил его в список автозагрузки, но как я могу запустить его каждый, например, 5 минут, автоматически?

    
задан Aleksander Mahnyov 23.02.2016 в 16:08
источник

2 ответа

14

ленивый вариант

Если вам нужен простой способ и не нужно определять, какую переменную среды установить:

  • Убедитесь, что ваш скрипт включает shebang
  • Сделать его выполнимым
  • Добавьте следующие приложения для запуска:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

    Dash > Приложения для запуска > Добавлять. Добавьте команду:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

Объяснение

Если вы запустите сценарий из своей собственной среды (например, из окна терминала или из приложений запуска), будет установлен ряд переменных окружения. Однако cron запускает ваш скрипт с ограниченным набором переменных среды.
Поскольку ваш скрипт, без сомнения, использует команду gsettings :

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

, чтобы установить обои, почти наверняка команда будет разорваться при запуске из cron .

Недостаток «ленивого решения» является чисто теоретическим. Команда, которая почти всегда спит, означает ничего для вашей системы.

Дополнительная информация; альтернативно

Чтение этого сообщения , и из опыта в прошлом я уверен, что переменная окружения DBUS_SESSION_BUS_ADDRESS должна быть установленным.

Чтобы сделать это, добавьте следующий раздел в начале вашего скрипта (ниже shebang):

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

Затем вы сможете успешно запустить его из cron .

Однако вы могли бы очень хорошо сохранить сутолоку и выбрать ленивый вариант.

    
ответ дан Jacob Vlijm 23.02.2016 в 16:35
источник
22

Поместите его в свой crontab .

Откройте таблицу cron :

crontab -e

Теперь добавьте:

*/5 * * * * /path/to/script.sh

Не забудьте сделать исполняемый файл сценария заранее.

Поскольку ваш скрипт зависит от X, вероятно, будет хорошей идеей добавить DISPLAY в среду сценария:

*/5 * * * * DISPLAY=:0 /path/to/script.sh

Замените :0 фактическим DISPLAY (можно найти echo $DISPLAY из интерактивного сеанса).

При необходимости вы также можете добавить переменную среды XAUTHORITY :

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

Снова вы можете найти значение на echo $XAUTHORITY .

    
ответ дан heemayl 23.02.2016 в 16:10