Существует очень удобный механизм, позволяющий приостанавливать работу программы Crack. Он контролируется сценарием pauser, который находится в подкаталоге scripts. Этот сценарий вызывается утилитой cracker примерно каждую минуту. По умолчанию сценарий pauser представляет собой бесконечный цикл, в котором проверяется наличие файла GOTO-SLEEP в каталоге $CRACK_HOME. Если этот файл существует, сценарий делает паузу в 60 секунд, после чего снова осуществляет проверку. Если файл по-прежнему присутствует, сценарий возвращается в режим ожидания. В случае отсутствия файла сценарий завершается, возвращая управление утилите cracker. Таким образом, все, что от нас требуется, — это создать файл GOTO-SLEEP в каталоге /usr/src/c50a.
Но возможности сценария pauser не ограничиваются только этим. Не стоит забывать, что это обычный сценарий интерпретатора sh, который можно расширять и модифицировать. Предположим, что нужно приостанавливать работу программы Crack в зависимости от числа выполняемых процессов. Один из способов решения поставленной задачи приведен в листинге 12.9. Строки, выделенные полужирным шрифтом, добавлены к существующему сценарию pauser. Эти строки переводят программу Crack в режим ожидания при наличии в системе не менее 20 выполняемых процессов (один из них — сама программа Crack). Число 20 выбрано произвольно, оно не отражает реальный предел числа процессов. Не стоит приостанавливать работу программы в зависимости от объема свободной памяти, доступных ресурсов процессора и т.п., поскольку программа старается задействовать все имеющиеся в наличии ресурсы данного типа.
Листинг 12.9. Пример сценария, контролирующего выполнение программы Crack 'начало сценария не показано'
С помощью этого сценария можно контролировать работу
программы Crack. Разрешается, к примеру, менять
периодичность опроса файла, exec '/dev/null'/dev/null 2>&1 POLL=60
L0CKFILE="GOTO-SLEEP" 'часть сценария не noказана'
while :
do
Пауза длится до тех пор, пока существует файл блокировки
в каталоге $CRACK_HOME.
if t -f $L0CKFILE ] then
sleep $P0LL continue
fi
'часть сценария не показана'
Команда wc -1 подсчитывает число символов новой строки,
которых всегда на единицу больше. Нужно еще учесть саму команду ps,
поэтому проверяется число 22, хотя реализуемый предел — 20.
numprocs-'ps axr|wc -1' if [ Snumprocs -ge 22 ] then
sleep $POLL
numprocs-0
continue
fi
'часть сценария не показана' break
done
exit 0
Можно сделать так, чтобы программа Crack запускалась только по ночам и в выходные дни. Соответствующий код уже реализован в сценарии pauser. Достаточно убрать символы комментария со строк 6-12 включительно, как показано в листинге 12.10 (номера строк добавлены для наглядности). Естественно, эти строки можно модифицировать дальше.
Листинг 12.10. Запуск программы Crack по ночам и в выходные дни
1. 21 'начало сценария не показано'
3.
4. Переход в режим ожидания с 8:00 до 17:59, кроме выходных.
5.
6. set 'date '+%Н %W ' $1=час(00, .23) $2=день(0.. 6)
7.
8. if [ "$1" -ge 8 -а "$1" -le 17 - -a "$2" -ge 1 -a "$2" -le 5 ]
9. then
10. sleep $POLL
11. continue
12. fi
13.
14. break
15. done
16.
17. exit 0