Запуск.sh каждые 5 минут

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

2 ответа

Решение

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

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

  • Убедитесь, что ваш сценарий включает в себя шебанг
  • Сделайте это исполняемым
  • Добавьте следующее в Startup Applications:

    /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 переменная окружения должна быть установлена.

Для этого добавьте следующий раздел в начале вашего скрипта (под шебаном):

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

Тогда вы сможете успешно запустить его из cron,

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

Поместите это в свой 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,

Другие вопросы по тегам