Условное выражение crontab управляет в сценарии удара

Вы не можете предоставить новую группу рабочему процессу. Необходимо войти в систему снова для получения процесса с измененными составами группы.

То, что можно сделать, должно запустить наутилус от другой сессии, но иметь его дисплей на существующем дисплее, чем-то как

ssh localhost "DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus &"

4
04.10.2012, 14:35
3 ответа

Поместите логический код для тестирования Вашего условия в самом сценарии, не пытайтесь вставить его (или связать его с) крон - сложная логика не то, для чего был разработан крон.

Так, в Вашем сценарии Вы тестируете условие и, если это оценивает к истинному, Вашим выполнениям кода обработки. Если это оценивает ко лжи, выйдите из сценария чисто.

При предположении, что 'условия' изменяются в результате обработки сценария (например, наблюдение папки для входящих файлов, которым нужны обработка и обработка одного файла каждые 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
7
27.01.2020, 20:49

Необходимо было бы создать сценарий удара, который проверил на условное выражение и присвоил сон ему. Затем расписание, которые колотят сценарий для выполнения в определенное время с помощью крона. Сам крон не не имеет поддержки условных выражений, или 'бежит за задержкой'.

2
27.01.2020, 20:49

Хорошо Вы обновили вопрос минутам теперь.

Таким образом, Вы работали бы каждые 20 минут =, достигают телефона 0/20/40/60 (=0) минута всех часов.

Запись была бы:

0,20,40 * * * * /path/to/some_command

И если Вы хотите выполнить его в течение ограниченных времен, используйте файл состояния для хранения, сколько раз Вы запустили тот сценарий.

0
27.01.2020, 20:49
  • 1
    Извините. Вы правы. Внесенный соответствующие изменения в вопросе. –  Arpith 04.10.2012, 14:35
  • 2
    Вы ничего не сказали о выполнении задания крона на основе оценки условного оператора. –  Arpith 04.10.2012, 16:02

Теги

Похожие вопросы