Вы не можете предоставить новую группу рабочему процессу. Необходимо войти в систему снова для получения процесса с измененными составами группы.
То, что можно сделать, должно запустить наутилус от другой сессии, но иметь его дисплей на существующем дисплее, чем-то как
ssh localhost "DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus &"
Поместите логический код для тестирования Вашего условия в самом сценарии, не пытайтесь вставить его (или связать его с) крон - сложная логика не то, для чего был разработан крон.
Так, в Вашем сценарии Вы тестируете условие и, если это оценивает к истинному, Вашим выполнениям кода обработки. Если это оценивает ко лжи, выйдите из сценария чисто.
При предположении, что 'условия' изменяются в результате обработки сценария (например, наблюдение папки для входящих файлов, которым нужны обработка и обработка одного файла каждые 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
Необходимо было бы создать сценарий удара, который проверил на условное выражение и присвоил сон ему. Затем расписание, которые колотят сценарий для выполнения в определенное время с помощью крона. Сам крон не не имеет поддержки условных выражений, или 'бежит за задержкой'.
Хорошо Вы обновили вопрос минутам теперь.
Таким образом, Вы работали бы каждые 20 минут =, достигают телефона 0/20/40/60 (=0) минута всех часов.
Запись была бы:
0,20,40 * * * * /path/to/some_command
И если Вы хотите выполнить его в течение ограниченных времен, используйте файл состояния для хранения, сколько раз Вы запустили тот сценарий.