Для запуска выбранных программ по расписанию очень удобно
использовать планировщик заданий nnCron (Автор — Николай Немцев). С
его помощью можно в указанное время и с заданной периодичностью
запускать любые процессы. nnCron LITE распространяется бесплатно,
сопровождается очень толковой документацией на русском языке и
работает со всеми ОС Windows. nnCron (не LITE) для некомерческого
использования также бесплатен для граждан бывшего СССР, но требует
регистрации. Он вобрал в себя все лучшее из известного в мире UNIX
планировщика cron. Скачать последнюю версию nnCron LITE (230кб) и nnCron
можно отсюда: www.nncron.ru
Основные возможности nnCron:
— может быть запущен в качестве службы (сервиса) или как обычное приложение
— понимает cron-формат (Unix) и управляется с помощью текстовых файлов
cron.tab, формат которых совместим с форматом кронтаб-файлов
Unix-систем
— умеет отслеживать и перезапускать просроченные задачи
— умеет задавать и использовать переменные окружения (environment variables)
— умеет запускать процессы от имени текущего авторизованного пользователя (WinNT/2000/XP)
— позволяет запускать плагины (скрипты произвольной сложности), написанные на языке программирования Форт
— гибко настраивается под конкретные нужды пользователя
— не требователен к ресурсам компьютера.
nnCron LITE значительно проще в использовании, чем
nnCron, но и скромнее по возможностям. Для примера рассмотрим вариант
использования nnCron LITE для решения следующей задачи:
В локальной сети необходимо в
17.00 ежедневно, кроме выходных, передавать архив каталога C:\BASE с
компьютера PC1 в каталог D:\ARHIV на компьютер PC3, и в 22.00 ежедневно
выключать компьютер PC3 и включать его же в 8.00. а в 8.30 выполнить
на нем программу program.exe.
Напрашивается простое решение с использованием
nncron на каждой машине, однако мы усложним ситуацию тем, что будем
считать компьютер PC2 компьютером администратора с установленным
nncron, а PC1 и PC3 — обычными компьютерами пользователей. Т.е.
управлять всеми процессами будет PC2. Это накладывает некоторые
ограничения на его конфигурацию — ОС на нем должна быть Win2k/XP с
правами администратора по отношению к ресурсам остальных компьютеров.
Для решения данной задачи нам потребуется не только
nncron, но и некоторые из утилит пакета Pstools от www.sysinternals.com
Шаг первый — устанавливаем и настраиваем nncron на компьютере PC2.
Для начала скачиваем nnCron LITE На сегодняшний день на сайте www.nncron.ru
выложена версия nncron Lite в виде исполняемого модуля nncronlt116.exe.
Запускаем его , выбираем язык (лучше, конечно, выбрать русский),
вариант установки (для одного пользователя или для всех на данном
компьютере) и каталог, где будет размещаться программа. После
успешного завершения инсталляции вы увидит итоговое окно, сообщающее,
что инсталляция завершена и сервис nnCron LITE запущен. В меню
«Программы» появился раздел nnCron LITE, позволяющий запустить или
остановить сервис.
В целом все готово к работе, однако желательно бы
установить nncron в качестве сервиса системы, чтобы он запускался
автоматически независимости от входа пользователя в систему. Для этого
переходим в папку C:|\Program Files\cron и запускаем install_svc.bat. В этой же папке находится текстовый файл cron.tab, содержимое которого является основным инструментом управления запуском заданий. После инсталляции он содержит следующее:
#CRONTAB FILE
# Classic crontab format:
# Minutes Hours Days Months WeekDays Command
#*/15 8-16 * * 1-5 checkmail.exe
Строки, начинающиеся с символа # являются
комментариями и планировщиком не обрабатываются (как и пустые
строки). Т.е. данный файл не содержит ничего, кроме комментариев,
дающих краткое описание классического crontab — формата (есть еще и
расширенный формат) и пример для запуска checkmail.exe.
Последняя строка (cron-формат) состоит из пяти полей, разделенных пробелами:
<Минуты> <Часы> <Дни месяца> <Месяцы> <Дни недели>
и имени запускаемой программы — checkmail.exe.
Символ * вместо значения определяет «все». Т.е. * в
поле <Дни месяца> означает, что задание должно выполняться все
дни месяца. Может быть задано конкретное значение в виде десятичного
числа или диапазона чисел. Так, в рассматриваемой строке в поле
<Часы> указано 8-16 — это означает, что задание будет
выполняться с 8 часов до 16. Возможно задание значений, разделенных
запятой — 8,9,10,11,12,13,14,15,16. В поле <Минуты> запись
выглядит так — */15 . Это означает «шаг» — каждые 15 минут. Запись 1-5 в
поле <Дни недели> означает «с понедельника по пятницу».
В итоге строка будет означать «Выполнять задание checkmail.exe
каждые 15 минут каждого часа каждого числа каждого месяца в рабочие дни
недели.»
Для проверки создадим простое задание :
«Запускать каждые 2 минуты интерпретатор команд Windows».
Строка cron.tab должна быть следующей:
<Минуты> <Часы> <Дни месяца> <Месяцы> <Дни недели> <Задание>
*/2
* *
*
*
cmd.exe
Добавляем в cron.tab строку :
*/2 * * * * cmd.exe
и убеждаемся, что задание выполняется. Если это не так, смотрим содержимое папки /log,
где nncron ведет журнал своих действий. Причиной обычно является
неверное имя задачи или отсутствие ее в путях поиска, заданных
переменной окружения PATH. Если вы используете указанную выше строку
crontab — формата в Win9x/Me, то получите ошибку, поскольку
интерпретатор команд в этих ОС — command.com, а не cmd.exe и строка
должна была бы выглядеть так:
*/2 * * * * command.com
Шаг второй — создаем задания для nncron.
Убедившись, что nncron работает, удаляем нашу
тестовую строку и приступаем к формированию строк для выполнения
нашего задания.
Для начала нам необходимо в 17.00 ежедневно, кроме выходных,
передавать архив каталога C:\BASE с компьютера PC1 в каталог
D:\ARHIV на компьютер PC3. C формированием условий запуска задания
проблем не возникает, но какое задание запускать?. Решений может
быть несколько, но рассмотрим самое простое — nncron будет запускать не
исполняемый модуль, а bat-файл, в котором будет выполняться
подключение сетевых дисков компьютеров PC1 и PC3 и архивирование с
помощью архиватора, запускаемого из командной строки. Пусть этот
файл называется arh.bat и находится в каталоге C:\SCRIPTS нашего компьютера PC2.
<Минуты> <Часы> <Дни месяца> <Месяцы> <Дни недели> <Задание>
0
17
* *
1-5
c:\scripts\arh.bat
Содержимое arh.bat может быть следующим (строки, начинающиеся с «rem » в командных файлах являются комментариями):
rem Подключаем диск C компьютера PC1 как сетевой диск M:
net use M: \\PC1\C
rem Подключаем диск D компьютера PC3 как сетевой диск N:
net use N: \\PC3\D
rem Архивируем C:\BASE компьютера PC1 в D:\ARHIV компьютера PC3 с помощью архиватора arj
arj a N:\ARHIV\PC3base.arj M:\BASE\*.*
rem удаляем сетевые подключения
net use N: /delete
net use M: /d
Запускаем arh.bat и убеждаемся, что он работает. После чего добавляем в cron.tab строку :
0 17 * * 1-5 C:\scripts\arh.bat
Первая часть задания выполнена. Вторая (в 22.00
ежедневно выключать компьютер PC3 и включать его же в 8.00. а в 8.30
выполнить на нем программу program.exe ) потребует наличия утилит
командной строки, позволяющих выполнять удаленное администрирование.
Для чего воспользуемся утилитами из пакета PsTools от Sysinternals и
broadc.exe. На всякий случай я разместил здесь ссылки на те утилиты,
которыми пользуюсь сам:
Psshutdown — утилита выключения/ перезагрузки компьютера (скачать, 126кб)
Позволяет выключать или перезагружать как локальный, так и удаленный компьютер. Формат командной строки:
psshutdown -s|-r|-h|-d|-k|-a|-l|-o [-f] [-t nn] [-m «Сообщение «] [-u Username [-p Password]] [\\computer]
Примеры использования:
psshutdown -k \\PC3 — выключить компьютер PC3. Вместо имени компьютера можно указать его IP-адрес. Если ничего не указано, то имеется в виду локальный компьютер.
psshutdown -r \\192.168.0.1 — перезагрузить удаленный компьютер с IP-адресом 192.168.0.1.
Psexec — утилита запуска заданий на удаленном компьютере (скачать, 139кб)
Формат командной строки:
psexec \\computer][-u user [-p psswd]][-s|-e][-i][-c [-f|-v]][-d][-
psexec \\PC3 program.exe — выполнить на удаленном компьютере program.exe. Выполняемая программа должна быть в путях поиска.
psexec \\PC3 -c C:\SCRIPTS\program.exe Выполняемая программа копируется на удаленный компьютер из C:\SCRIPTS и выполняется.
Broadc — утилита для включения компьютера по локальной сети. (скачать, 32кб)
Формат командной строки:
broadc.exe MAC-адрес сетевой карты 255.255.255.255 67
Примеры использования:
bbroadc.exe 0002b3d8b4e6 255.255.255.255 67 — включить компьютер,
MAC — адрес сетевой карты которого равен 0002b3d8b4e6 .
Материнская плата и сетевая карта должны обеспечивать удаленное
включение и в BIOS должна быть включена поддержка расширенного
управления питанием.
Создаем расписание заданий:
<Минуты> <Часы> <Дни месяца> <Месяцы> <Дни недели> <Задание>
0
22 *
*
*
psshutdown
0
8
* *
*
broadc
30
8 *
*
*
psexec
Добавляем в cron.tab следующие строки:
0 22 * * * C:\SCRIPTS\psshutdown.exe -k \\PC3
0 8 * * * C:\SCRIPTS\broadc.exe 0002b3d8b4e6 255.255.255.255 67
30 8 * * * C:\SCRIPTS\psexec.exe \\PC3 programm.exe