Поместите логический код для тестирования Вашего условия в самом сценарии, не пытайтесь вставить его (или связать его с) крон - сложная логика не то, для чего был разработан крон.
Так, в Вашем сценарии Вы тестируете условие и, если это оценивает к истинному, Вашим выполнениям кода обработки. Если это оценивает ко лжи, выйдите из сценария чисто.
При предположении, что 'условия' изменяются в результате обработки сценария (например, наблюдение папки для входящих файлов, которым нужны обработка и обработка одного файла каждые 20 м), затем в конечном счете условие оценит ко лжи все время, потому что вся работа была сделана.
Из Ваших комментариев похоже на контроль доступности некоторого сервера.
Я не делаю чертовски много с ударом, но как насчет этого:
#!/bin/bash
if [ `ps ax | grep $0 | wc -l` -le 3 ]; then #1
if [ `arping ...` -ne 1 ]; then #2
sleep 1200
if [ `arping ...` -eq 1 ]; then #3
# do your processing here
fi
fi
fi
Первое, если оператор (#1) удостоверяется, что это - единственный экземпляр этого конкретного сценария, который работает. Если другой сценарий (все еще) работает, мы выходим и ничего не делаем.
Второй (#2) является Ваша начальная буква, 'хост дающий отклик на ping-запрос' тест. Если это не, то сценарий ожидает 1200-е (20 минут) прежде, чем протестировать снова (#3).
Так, если два ping - на расстоянии в 20 минут - покажут, что Ваш хост стал достижимым затем, то Ваш код обработки будет работать.
Если Вы хотите упростить вещи немного, попробуйте это:
#!/bin/bash
if [ `arping -w 59 ...` -ne 1 ]; then
sleep 1079
if [ `arping -w 59 ...` -eq 1 ]; then
# do your processing here
fi
fi
Если Вы наложите крайний срок изнасилования немного менее чем 1 минуты (-w 59) для Ваших проверок и настроите сумму сна, то можно в значительной степени гарантировать, что два теста и промежуточный сон будут завершены в течение 20-минутного периода, таким образом, не должно будет быть никакого перекрытия со смежными периодами и никакой потребности проверить, чтобы видеть, работает ли другой сценарий все еще.
Любой из вышеупомянутых сценариев был бы, конечно, вызван через статическую запись крона, которая работает каждые 20 минут:
*/20 * * * * /path/to/script.sh
Сам системный-журнал-ng не делает этого. Однако вот несколько способов достигнуть высоконадежного входа, отсортированного на увеличивающихся уровнях сложности/стоимости:
Просто добавление обоих серверов и всегда пишет в обоих, самый легкий.
Имейте резервную конфигурацию системного журнала вокруг со вторым именем сервера. Имейте cronjob или что-то для проверки локального системного журнала на отчеты об ошибках соединения к серверу и, когда каждый будет найден, системный журнал перезапуска с резервной конфигурацией
Установка haproxy в tcp-режиме на локальном сервере и установка его, чтобы использовать основной сервер сначала и перейти к второму в случае, если первые сбои. Системный журнал набора для входа к локальному haproxy экземпляру вместо непосредственно к удаленным серверам
Установка кластера лог-серверов с совместно используемыми дисками на SAN, коммерческий HA (например, Кластера Veritas)... Это дорого; стоит ли это того, будет зависеть от того, какого количества это будет стоить Вам для потери некоторых журналов.