Выполнять команду каждые 30 секунд в фоновом режиме на CentOS

Название говорит само за себя:

Как я могу бесконечно запускать какую-то команду каждые 30 секунд в фоновом режиме на CentOS? То есть: я хочу иметь возможность делать другие вещи, пока периодически вызывается какой-то другой скрипт.


person IHaveAQuestion    schedule 09.10.2017    source источник
comment
Как насчет работы cron, если каждая минута в порядке. В противном случае два задания cron, одно с sleep 30 перед основной задачей?   -  person sauerburger    schedule 10.10.2017
comment
@sauerburger, я думал об этом, но мне это кажется немного неуклюжим. Нет ли лучшего, более канонического способа сделать это?   -  person IHaveAQuestion    schedule 10.10.2017


Ответы (1)


По умолчанию cron не может планировать запуск заданий в секундах. Максимум, что вы можете сделать, это запускать его каждую минуту.

1) запустить его с помощью одного cron

Чтобы запустить его с помощью cron, каждые 30 секунд вы можете создавать одну запись cron следующим образом:

* * * * * /bin/bash -l -c "/path/to/script.sh; sleep 30 ; /path/to/script.sh"

2) запустить его с помощью часов

Запустите скрипт с помощью часов ((вы можете запустить его с экрана или tmux) или даже в фоновом режиме)

watch --interval 30 /path/to/script.sh 

3) используйте цикл while следующим образом:

#!/bin/env bash
while [ true ]; do
 sleep 30
 /path/to/script.sh
done

Имейте в виду, что этот вариант не является отказоустойчивым, поскольку все зависит от того, что именно делает ваш cron и сколько времени требуется для завершения задания, выполняемого cron. В приведенном выше примере (3), если cron запускается 25 секунд, ваш скрипт будет задержан и так далее. То же самое относится и к варианту (1)

4) используя cron, альтернативный стандартному linux cron (используйте fcron)

5) Подобные вопросы уже задавались на SO, поэтому вы можете взглянуть на это: Как запускать Cronjobs чаще, чем раз в минуту?

person Bogdan Stoica    schedule 18.10.2017