Управление службами из командной строки и настройки при сбое

Управление службами из командной строки и настройки при сбое Командная строка

Операционная система, как и все то, что создано человеком, подвержено сбою и поломки. Тут я хочу затронуть утилиту sc failure, которая дает возможность управлять службами Windows из командной строки. Для простого пользователя операционная система показывает только вершину айсберга, только частицу своих возможностей, и это правильно, ведь простой обыватель, управляемый собственным любопытством может вмиг разрушить то, на что компания Microsoft тратит свои знания и время. Но, есть и другая сторона монеты – программисты.

Во времена, когда Windows и не пахло, а Билл Гейтс усердно программировал на assembler, было создано знаменитую MS-DOS. Но, интерес к системе будет только в том случае, если к ней прилагается достаточно программного обеспечения. Создавать программы под DOS просто, тут не нужны тома документации или толстые справочники, а вот с Windows все по-другому (хотя с Windows Script Host можно тоже многое создать). Простым примером может служить то, как одни игры прекрасно идут на 98, а уже на XP или Семерке постоянно хулиганят. И не надо тут говорить про правый клик/совместимость!!! Ошибки частенько возникают, если игра запущена под учетной записью, на которую наложены ряд ограничений (редактирование реестра или доступ к %SystemRoot%). Однако, системные службы тоже не идеальны, и с ними происходят сбои.

Как правило, критически важные службы и их восстановление в случае сбоя настраивается автоматически. Так, IIS Admin настроена так, что в случае сбоя запускается программа lisreset.exe, которая и устраняет возникшие проблемы. Ну, создавать пока собственные службы рано, а вот управление имеющимися из командной строки произвести можно.

Войдем в Панель управления/Администрирование и откроем оснастку Cлужбы, двойной клик по сервису и переход на вкладку Восстановление:

Тут можно прописать действия компьютера при первом, втором или последующем сбое (например перегрузить систему или запустить программу для диагностики), а также ряд других параметров. Однако, управление службами из командной строки также возможно, для этого используется утилита sc и команда failure с рядом параметров:

sc failure ИмяСлужбы [reset= ИнтервалСбросаСчетчика][reboot= СообщениеПриСбое][command= ПутьКСценарию][actions= ДействияПриСбое]

Тут все довольно просто,

  • ИнтервалСбросаСчетчика – время стабильной работы (в секундах), спустя которое произойдет сброс счетчика неудач,
  • СообщениеПриСбое – широковещательное сообщения
  • ПутьКСценарию – путь к программе или сценарию, который будет запускаться при сбое
  • ДействиеПриСбое – Действие, происходящие при сбое:

TakeNoActive – этот сбой будет проигнорирован системой, но она попробует восстановить службу при предыдущих или последующих сбоях

RestartTheService – в данном случае после короткой паузы произойдет перезапуск службы

RunAProgram – нужно указать полный путь к программе, сценарию или командному файлу, который будет запущен после сбоя (сразу лезут подлые мыслишки про засевший в системе троян, который перейдет в атаку при аварии в системе).

RebootTheComputer – перезагрузка системы по прошествии указанного времени.

Стоит учитывать, что ИнтервалСбросаСчетчика, как правило, устанавливают на несколько часов или дней (тут время указывается в секундах). Указывать можно не одно действие, а несколько, при этом стоит также указать время, через которое это действие будет выполнено, (время указывают в миллисекундах), разделителем выступает косая черта (/);

Sc failure w3svc reset=86400 actions= restart/1/restart/1/reboot/30000

в данном примере спустя 1 миллисекунда будет произведен перезапуск службы при первой и второй попытке, а уже на третей попытке будет произведен перезапуск системы спустя 30 секунд. Как видно, счетчик неудач будет сброшен спустя 24 часа без сбоев (86400 секунд). Для управления службами удаленных систем из командной строки, допустимо использование UNC – имени или IP-адреса:

sc 192.168.1.5 failure ИмяСлужбы reset= ИнтервалСбросаСчетчика actions= Действие.

Если надо при сбое запустить нужный сценарий или программу, то синтаксис может быть таким:

Sc failure w3svc reset=66400 actions= restart/1/restart/1/run/30000 command="c:restart_w3svc.exe"

Прежде чем производить управление системными службами из оболочки командной строки, можно узнать уже имеющиеся настройки с помощью команды scqfailure:

sc qfailure ИмяСлужбы.

Например, для антивируса Avast заданы такие параметры:

Использование утилиты командной строки sc qfailure

В данном примере видно, что поле RESET_PERIOD ровно 3600 секунд (60 минут или час) – интервал сброса счетчика. Поле REBOOT_MESSAGE является пустым – сообщение при сбое, никакого сценария или программы при сбое также запускаться не будет, поскольку поле COMMAN_LINE пусто. FAILURE_ACTIONS – в первый и второй сбой произойдет перезапуск, с периодом в 5000 миллисекунд. Вообще-то, утилита sc содержит множество полезных функций, вплоть до прописки новой службы в системе.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий