Лучший отвечающий
Помогите чайнику написать командный файл для выключение серверов при пропадание электричества - сервера на server 2003 enterprise edition x64 sp2

Вопрос
-
Помогите чайнику написать командный файл для выключение серверов при пропадание электричества - сервера на server 2003 enterprise edition x64 sp2. проблема заключается в том что в АРС ПО PowerChute Business Edition 7.0.5 время на отключение серверов дается максимум 10 минут машинки не успевают лечь корректно и УПС тупо рубит напряжение хотя времени ещё много и как рекомендует саппорт надо гасить машины через командный файл.24 августа 2009 г. 8:09
Ответы
-
так нельзя использовать несколько лупов:
Спасибо всех кто откликнулся, пока успел испробовать такой вариант и на рабочих машинках (сервера жалко) на win 2000 pro
shutdown -s -f -t 0 -c "Main power down" -m \\server1
:loop
SET SDS="OFF"
PING -w 100 Server1 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server2
:loop
SET SDS="OFF"
PING -w 100 Server2 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server3
но на первой машинки затыкается и усё
надо:
:loop
...
if %SDS% EQU "ON" goto loop
:loop1
...
if %SDS% EQU "ON" goto loop1
:loop2
...
if %SDS% EQU "ON" goto loop2
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.- Изменено Artem Gusev HCG 24 августа 2009 г. 10:38
- Помечено в качестве ответа Толстый 25 августа 2009 г. 14:21
24 августа 2009 г. 10:37 -
по п.2 наверно не совсем ясно выразил свою мысль - представим что 99 серверов затупили ложиться и соответственно 100 сервер который самый важный из -за них не успеет лечь, а мне предположим нужно что бы он (100 сервак) начал шатенданиться не позже 15 минут (для примера) с начала запуска файла приступил к шатендауну ВНЕ зависимости успели предыдущие лечь или нет. типа он самый ценный и если пошло все в кривь его спасаем любой ценой.
Ну, можно сделать два скрипта. И запускать их одновременно, по шедуллеру, скажем... Один скрипт - как см. выше. Второй:
ping localhost -n 900 > nul
shutdown -s -f -t 0 -m \\glavnyserver
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.- Помечено в качестве ответа Толстый 25 августа 2009 г. 14:21
24 августа 2009 г. 12:01
Все ответы
-
Помогите чайнику написать командный файл для выключение серверов при пропадание электричества - сервера на server 2003 enterprise edition x64 sp2. проблема заключается в том что в АРС ПО PowerChute Business Edition 7.0.5 время на отключение серверов дается максимум 10 минут машинки не успевают лечь корректно и УПС тупо рубит напряжение хотя времени ещё много и как рекомендует саппорт надо гасить машины через командный файл.
shutdown -s -f -t 0 -c "Main power down"
Как-то так.....
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.- Предложено в качестве ответа Vasily GusevModerator 24 августа 2009 г. 10:10
24 августа 2009 г. 8:16 -
Помогите чайнику написать командный файл для выключение серверов при пропадание электричества - сервера на server 2003 enterprise edition x64 sp2. проблема заключается в том что в АРС ПО PowerChute Business Edition 7.0.5 время на отключение серверов дается максимум 10 минут машинки не успевают лечь корректно и УПС тупо рубит напряжение хотя времени ещё много и как рекомендует саппорт надо гасить машины через командный файл.
shutdown -s -f -t 0 -c "Main power down"
Как-то так.....
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
я примерно так и делал только короче shutdown /s , Но есть 2 загвоздки: 1) хочется гасить сервак который к УПСу не подключен через ком порт и не обслуживается АПСишным софтом и соответственно в лоб УПС запустить командный файл на такой машинке не может, а надо погасить и его и желательно по расписанию, т.е. один сервак раньше положить затем второй, затем третий, а подключен и управляется УПСом только один.
2) загвоздка ещё в том что насколько понял что бы эти команды выполнились надо службы APC запустить под правами админа, так на одной машинки они запускаються и живут нормально, а на другой они после перезагрузки сервера не запускаються24 августа 2009 г. 8:27 -
Погасить удалённую машину:
shutdown -m \\servername
Сделать паузу в командном файле:
ping localhost -n 60 > nul
(60 - количество секунд, "> nul" - необязательно, просто скрывает вывод)
Ну и пишете командный файл, который будет запускаться на сервере подключённом к ИБП и гасить другие сервера.
MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003- Предложено в качестве ответа Vasily GusevModerator 24 августа 2009 г. 10:11
24 августа 2009 г. 8:48 -
хочется гасить сервак который к УПСу не подключен через ком порт и не обслуживается АПСишным софтом и соответственно в лоб УПС запустить командный файл на такой машинке не может, а надо погасить и его и желательно по расписанию, т.е. один сервак раньше положить затем второй, затем третий, а подключен и управляется УПСом только один.
Значит батник должен запускаться на машине с УПС (что это? Управление питанием сервера?).
@echo off for %%i in (servak_1 servak_2 servak_3) do ( shutdown /m \\%%i /s /t 20 /c "Nema toka" /f
) shutdown /s /t 0 /f
Если нужен таймаут, то добавьте, к примеру, sleep 20 в цикл, для паузы в 20 сек. Ведь есть sleep.exe на серваке? Или пингуйте локалхост ( ping -n 21 localhost 1>nul )
24 августа 2009 г. 8:52 -
я примерно так и делал только короче shutdown /s , Но есть 2 загвоздки: 1) хочется гасить сервак который к УПСу не подключен через ком порт и не обслуживается АПСишным софтом и соответственно в лоб УПС запустить командный файл на такой машинке не может, а надо погасить и его и желательно по расписанию, т.е. один сервак раньше положить затем второй, затем третий, а подключен и управляется УПСом только один.
Какой сервер управляется powershut-ом? С него и запускайте скрипт.
2) загвоздка ещё в том что насколько понял что бы эти команды выполнились надо службы APC запустить под правами админа, так на одной машинки они запускаються и живут нормально, а на другой они после перезагрузки сервера не запускаються
У команды shutdown есть параметр -m \\computer...
т.е сначала shutdown серверов первой очереди:
shutdown -s -f -t 0 -c "Main power down" -m \\server1
shutdown -s -f -t 0 -c "Main power down" -m \\server2
shutdown -s -f -t 0 -c "Main power down" -m \\server3
:loop
SET SDS="OFF"
PING -w 100 Server1 |find "TTL=" && set SDS="ON" ' Например, сервер 1 выключается дольше всего. Ждем когда он выключится
if %SDS% EQU "ON" goto loop
затем shutdown серверов второй очереди:
shutdown -s -f -t 0 -c "Main power down" -m \\server4
shutdown -s -f -t 0 -c "Main power down" -m \\server5
shutdown -s -f -t 0 -c "Main power down" -m \\server6
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.24 августа 2009 г. 9:13 -
я примерно так и делал только короче shutdown /s , Но есть 2 загвоздки: 1) хочется гасить сервак который к УПСу не подключен через ком порт и не обслуживается АПСишным софтом и соответственно в лоб УПС запустить командный файл на такой машинке не может, а надо погасить и его и желательно по расписанию, т.е. один сервак раньше положить затем второй, затем третий, а подключен и управляется УПСом только один.
Какой сервер управляется powershut-ом? С него и запускайте скрипт.
2) загвоздка ещё в том что насколько понял что бы эти команды выполнились надо службы APC запустить под правами админа, так на одной машинки они запускаються и живут нормально, а на другой они после перезагрузки сервера не запускаються
У команды shutdown есть параметр -m \\computer...
т.е сначала shutdown серверов первой очереди:
shutdown -s -f -t 0 -c "Main power down" -m \\server1
shutdown -s -f -t 0 -c "Main power down" -m \\server2
shutdown -s -f -t 0 -c "Main power down" -m \\server3
:loop
SET SDS="OFF"
PING -w 100 Server1 |find "TTL=" && set SDS="ON" ' Например, сервер 1 выключается дольше всего. Ждем когда он выключится
if %SDS% EQU "ON" goto loop
затем shutdown серверов второй очереди:
shutdown -s -f -t 0 -c "Main power down" -m \\server4
shutdown -s -f -t 0 -c "Main power down" -m \\server5
shutdown -s -f -t 0 -c "Main power down" -m \\server6
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
Спасибо всех кто откликнулся, пока успел испробовать такой вариант и на рабочих машинках (сервера жалко) на win 2000 pro
shutdown -s -f -t 0 -c "Main power down" -m \\server1
:loop
SET SDS="OFF"
PING -w 100 Server1 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server2
:loop
SET SDS="OFF"
PING -w 100 Server2 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server3
но на первой машинки затыкается и усё24 августа 2009 г. 10:30 -
и ещё вопрос а команда
-f Принудительное завершение приложений без
предварительного предупреждения
даст корректно закрыть/погасить машину, типа не порубит что то слишком жестко?
24 августа 2009 г. 10:35 -
так нельзя использовать несколько лупов:
Спасибо всех кто откликнулся, пока успел испробовать такой вариант и на рабочих машинках (сервера жалко) на win 2000 pro
shutdown -s -f -t 0 -c "Main power down" -m \\server1
:loop
SET SDS="OFF"
PING -w 100 Server1 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server2
:loop
SET SDS="OFF"
PING -w 100 Server2 |find "TTL=" && set SDS="ON"
if %SDS% EQU "ON" goto loop
shutdown -s -f -t 0 -c "Main power down" -m \\server3
но на первой машинки затыкается и усё
надо:
:loop
...
if %SDS% EQU "ON" goto loop
:loop1
...
if %SDS% EQU "ON" goto loop1
:loop2
...
if %SDS% EQU "ON" goto loop2
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.- Изменено Artem Gusev HCG 24 августа 2009 г. 10:38
- Помечено в качестве ответа Толстый 25 августа 2009 г. 14:21
24 августа 2009 г. 10:37 -
Погасить удалённую машину:
просто достаточно добавить эту строчку и выполнение приостанавливается на 60 секунд?
shutdown -m \\servername
Сделать паузу в командном файле:
ping localhost -n 60 > nul
(60 - количество секунд, "> nul" - необязательно, просто скрывает вывод)
Ну и пишете командный файл, который будет запускаться на сервере подключённом к ИБП и гасить другие сервера.
MCP | scriptoholic | PowerShell | SCCM 2007 | SMS 2003
...
ping localhost -n 60
...24 августа 2009 г. 11:12 -
так нельзя использовать несколько лупов:
Спасибо всех кто откликнулся, пока успел испробовать такой вариант и на рабочих машинках (сервера жалко) на win 2000 pro
....
надо:
:loop
...
if %SDS% EQU "ON" goto loop
:loop1
...
if %SDS% EQU "ON" goto loop1
:loop2
...
if %SDS% EQU "ON" goto loop2
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
1) при этих Лупах возможен сценарий когда из-за чего то (сбоя в работе какой то железки софта) не дойдет очередь до шатендауна последнего сервера?
2) и ещё как сделать такой сценарий что если пройдет какое те лимитное время (ну там 15 минут) ВНЕ зависимости успели лечь предыдущие 99 серверов или не успели главный по важности сервер будет запущен на баиньки?
3) как сделать что бы окно (в котором командный файл прокручивается при исполнении) не закрывалось, а то он в конце на что то ругается, но я не успеваю прочитать24 августа 2009 г. 11:19 -
Спасибо поправил вроде работает и ещё не скромные вопросы:
1. Возможен. Если сервер по какой причине не выключился....
1) при этих Лупах возможен сценарий когда из-за чего то (сбоя в работе какой то железки софта) не дойдет очередь до шатендауна последнего сервера?
2) и ещё как сделать такой сценарий что если пройдет какое те лимитное время (ну там 15 минут) ВНЕ зависимости успели лечь предыдущие 99 серверов или не успели главный по важности сервер будет запущен на баиньки?
3) как сделать что бы окно (в котором командный файл прокручивается при исполнении) не закрывалось, а то он в конце на что то ругается, но я не успеваю прочитать
Можно модифицировать скрипт таким образом, чтобы он пинговал, скажем, 15 пачек по 4 пинга... - это будет как раз 60 секунд
2. См. 1
3. добавить в конец скрипта:
pause
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.24 августа 2009 г. 11:26 -
Только не ясно зачем несколько одинаковых _лупов_, когда все делается в 3 строчки в цикле? Если этот самый loop можно вынести в метку :loop из цикла?
@echo off
for %%i in (setver_1 server_2 server_3) do call:loop %%i
shutdown /s /t 0 /f
goto:eof
:loop
ping -n 1 %1 1>nul && shutdown /m \\%1 /s /t 0 /c "Power Down" /f || goto:loop
24 августа 2009 г. 11:46 -
Спасибо поправил вроде работает и ещё не скромные вопросы:
1. Возможен. Если сервер по какой причине не выключился....
1) при этих Лупах возможен сценарий когда из-за чего то (сбоя в работе какой то железки софта) не дойдет очередь до шатендауна последнего сервера?
2) и ещё как сделать такой сценарий что если пройдет какое те лимитное время (ну там 15 минут) ВНЕ зависимости успели лечь предыдущие 99 серверов или не успели главный по важности сервер будет запущен на баиньки?
3) как сделать что бы окно (в котором командный файл прокручивается при исполнении) не закрывалось, а то он в конце на что то ругается, но я не успеваю прочитать
Можно модифицировать скрипт таким образом, чтобы он пинговал, скажем, 15 пачек по 4 пинга... - это будет как раз 60 секунд
2. См. 1
3. добавить в конец скрипта:
pause
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
по п.2 наверно не совсем ясно выразил свою мысль - представим что 99 серверов затупили ложиться и соответственно 100 сервер который самый важный из -за них не успеет лечь, а мне предположим нужно что бы он (100 сервак) начал шатенданиться не позже 15 минут (для примера) с начала запуска файла приступил к шатендауну ВНЕ зависимости успели предыдущие лечь или нет. типа он самый ценный и если пошло все в кривь его спасаем любой ценой. может как то надо продублировать по истечении 15 минутной задержки его баиньки если по нормальному сценарию не получилось?24 августа 2009 г. 11:54 -
Только не ясно зачем несколько одинаковых _лупов_, когда все делается в 3 строчки в цикле? Если этот самый loop можно вынести в метку :loop из цикла?
Изначально был только один "луп"...
А вообще совершенству нет предела. Идея заработает корректно - можно и процедуры использовать...
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.24 августа 2009 г. 11:54 -
по п.2 наверно не совсем ясно выразил свою мысль - представим что 99 серверов затупили ложиться и соответственно 100 сервер который самый важный из -за них не успеет лечь, а мне предположим нужно что бы он (100 сервак) начал шатенданиться не позже 15 минут (для примера) с начала запуска файла приступил к шатендауну ВНЕ зависимости успели предыдущие лечь или нет. типа он самый ценный и если пошло все в кривь его спасаем любой ценой.
Ну, можно сделать два скрипта. И запускать их одновременно, по шедуллеру, скажем... Один скрипт - как см. выше. Второй:
ping localhost -n 900 > nul
shutdown -s -f -t 0 -m \\glavnyserver
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.- Помечено в качестве ответа Толстый 25 августа 2009 г. 14:21
24 августа 2009 г. 12:01 -
Только не ясно зачем несколько одинаковых _лупов_, когда все делается в 3 строчки в цикле? Если этот самый loop можно вынести в метку :loop из цикла?
попробовал, но только 1 машинка легла и усё остановилось
@echo off
for %%i in (setver_1 server_2 server_3) do call:loop %%i
shutdown /s /t 0 /f
goto:eof
:loop
ping -n 1 %1 1>nul && shutdown /m \\%1 /s /t 0 /c "Power Down" /f || goto:loop
24 августа 2009 г. 12:14 -
по п.2 наверно не совсем ясно выразил свою мысль - представим что 99 серверов затупили ложиться и соответственно 100 сервер который самый важный из -за них не успеет лечь, а мне предположим нужно что бы он (100 сервак) начал шатенданиться не позже 15 минут (для примера) с начала запуска файла приступил к шатендауну ВНЕ зависимости успели предыдущие лечь или нет. типа он самый ценный и если пошло все в кривь его спасаем любой ценой.
Ну, можно сделать два скрипта. И запускать их одновременно, по шедуллеру, скажем... Один скрипт - как см. выше. Второй:
ping localhost -n 900 > nul
shutdown -s -f -t 0 -m \\glavnyserver
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
правильно ли я понимаю (Чайник я однако) что шедуллер это ПО АПСи которое запускает исполняемый файл в котором нужно прописать 2 строчки с двумя исполняемыми батниками, типа
shutdown1.bat
shutdown2.bat
и в первом например то что описывалось ранее с лупами и во втором как раз такой сценарий:
ping localhost -n 900 > nul
shutdown -s -f -t 0 -m \\glavnyserver
я все правильно понял?
24 августа 2009 г. 12:19 -
правильно ли я понимаю (Чайник я однако) что шедуллер это ПО АПСи которое запускает исполняемый файл в котором нужно прописать 2 строчки с двумя исполняемыми батниками, типа
Я подразумевал планировщик заданий....
shutdown1.bat
shutdown2.bat
А в ПО АПСи - скрипт, который эти задания запускает можно поместить...
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.24 августа 2009 г. 12:39 -
Только не ясно зачем несколько одинаковых _лупов_, когда все делается в 3 строчки в цикле? Если этот самый loop можно вынести в метку :loop из цикла?
попробовал, но только 1 машинка легла и усё остановилось
@echo off
for %%i in (setver_1 server_2 server_3) do call:loop %%i
shutdown /s /t 0 /f
goto:eof
:loop
ping -n 1 %1 1>nul && shutdown /m \\%1 /s /t 0 /c "Power Down" /f || goto:loop
попробовал ещё раз и легли не только все машины из списка, НО и моя которая в списке не присутствовала....24 августа 2009 г. 12:40 -
> попробовал, но только 1 машинка легла и усё остановилось
Я так думаю, что вообще проверять доступность сервера по пингу в закольцованной процедуре не верно. Может он вообще не доступен, а батник так и будет пинговать...
Можно изменить параметры самого пинга (увеличить кол-во запросов):
ping -n 11 %1 1>nul && shutdown ...
или не пинговать вовсе. Если сервер доступен, то он выключится, если нет - то хоть пингуй, хоть нет.
24 августа 2009 г. 12:43 -
правильно ли я понимаю (Чайник я однако) что шедуллер это ПО АПСи которое запускает исполняемый файл в котором нужно прописать 2 строчки с двумя исполняемыми батниками, типа
Я подразумевал планировщик заданий....
shutdown1.bat
shutdown2.bat
А в ПО АПСи - скрипт, который эти задания запускает можно поместить...
Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
в ПО APC есть файл default.cmd (сам файл по умолчание лежит в директории c:\Program Files\APC\PowerChute Business Edition\agent\cmdfiles\) которое это ПО и запускает согласно тому что в этом ПО прописал/задал.
а вот что внутри него написано:
@echo off
rem
rem Maximize for best viewing
rem This command file provides examples of proper command file syntax
rem
rem Command Files run by PowerChute Business Edition must be placed in this directory.
rem
rem Use the full path name of executable programs and external command files.
rem
rem The @START command must be used to run executable programs (see example below).
rem For the @START command, path names that include spaces must be enclosed in quotes;
rem arguments for the executable must be outside the quotes. A double quote must
rem precede the quoted path name. For example, to execute a command file in
rem c:\Program Files\APC\PowerChute Business Edition\agent\cmdfiles called myShut.exe,
rem the following line should be entered in the command file:
rem
rem @START "" "c:\Program Files\APC\PowerChute Business Edition\agent\cmdfiles\myShut.exe"- Предложено в качестве ответа Angel-Keeper 26 августа 2009 г. 3:27
24 августа 2009 г. 12:45 -
> а вот что внутри него написано:
Раскомментируй последнюю строку и проверь пути к myShut.exe- Предложено в качестве ответа Angel-Keeper 26 августа 2009 г. 3:27
24 августа 2009 г. 12:48 -
Спасибо за помощь в выходные буду "ломать" сервера25 августа 2009 г. 14:23