Запуск .sh кожні 5 хвилин


12

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


1
Спробуйте cronmaker.com, там ви можете зробити cron-вирази і поставити це за допомогою crontab -e
Ми Borg

2
Чи змінюється картина навіть кожні 5 хвилин? Спробуйте використовувати інтервал, який створює менше зайвого навантаження на цільовий сервер. Або переконайтеся, що ви завантажуєте лише тоді, коли файл дійсно змінений.
til_b

1
До речі, яка URL-адреса для космічних фонів?
bohdan_trotsenko

Відповіді:


14

Ледачий варіант

Якщо ви хочете простий спосіб і уникаєте необхідності з’ясувати, яку змінну середовища встановити:

  • Переконайтеся, що ваш сценарій містить шебанг
  • Зробіть його виконуваним
  • Додайте наступне до програм запуску:

    /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.

Однак ви могли б дуже добре врятувати суєту і вибрати лінивий варіант.


@AleksanderMahnyov Вітаємо Вас Радий, що це працює :)
Яків Влійм

2
Набагато краще скористатися роботою cron.
Лука Рамішвілі

1
@LukaRamishvili Дякую за коментар. Однак: a. І чому це? спляча команда нічого не означає для вашої системи. б. Я навіть включив варіант.
Яків Влійм

1
В іншому випадку, приємне дослідження змінних сеансів gnome, це б дуже допомогло ОП, оскільки це було б потрібно в будь-якому випадку.
Лука Рамішвілі

2
Я просто подивився: про cpu 0.0%який податок ми говоримо?
Яків Влійм

25

Покладіть його у своє 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.


1
Не впевнений, чи працює він з обмеженими змінними середовища cron, але давайте подивимось, чи згадує ОП, що він працює :)
Яків Влім

1
@AleksanderMahnyov Будь ласка, відредагуйте своє запитання, щоб додати сценарій, важко сказати, не бачачи вмісту ... DISPLAYXAUTHORITY
можливо,

1
@Kartagis Cron не може впоратися з секундами, також ви намагаєтеся робити години, які все ще синтаксично неправильні ..
heemayl

2
Я люблю цей метод, а не "ледачий метод", тому що я знав про cron, але мені потрібно було трохи пройти курси підвищення кваліфікації. Це саме те, що я зробив, велике спасибі! :)
ZaxLofful

2
Кращий підхід, ніж прийнята відповідь. :)
Сандіп Кумар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.