У мене є .sh-скрипт, який завантажує фотографію з сервера японського супутника і встановлює його як фонове зображення. Я вклав його до списку запуску, але як я його запускаю кожні, наприклад, 5 хвилин, автоматично?
У мене є .sh-скрипт, який завантажує фотографію з сервера японського супутника і встановлює його як фонове зображення. Я вклав його до списку запуску, але як я його запускаю кожні, наприклад, 5 хвилин, автоматично?
Відповіді:
Якщо ви хочете простий спосіб і уникаєте необхідності з’ясувати, яку змінну середовища встановити:
Додайте наступне до програм запуску:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Тире> Запуск програми> Додати. Додайте команду:
/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
.
Однак ви могли б дуже добре врятувати суєту і вибрати лінивий варіант.
cpu 0.0%
який податок ми говоримо?
Покладіть його у своє 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
.
DISPLAY
XAUTHORITY