Данный скрипт я раскопал на просторах интернета в виде "как запустить службу" или "как остановить службу", подкрасил, подмазал, подправил и поставил, но данные решения в итоге мне не очень подошли по следующим причинам:
1. После передачи команды службе, к примеру, отправили "stop", она может и вовсе не завершиться, так сказать (забить) проигнорировать и в результате придется запускать скрипт по новой или делать что-то руками.
2. Вытекает из п. 1 - за скриптом надо следить, поглядывать, остановилась ли служба или запустилась ли служба.
3. Таймаут для ожидания остановки или запуска службы в зависимости от загрузки железа все время "не в кассу", то слишком маленький, то слишком большой, жалко времени на все это....
ИСХОДНЫЙ СКРИПТ:
// - далее по тексту таким образом будут обозначаться комментарии в коде
// эти комментарии, естественно, убираем когда все это станет батником или цмдшником
// ну или меняем на rem
Текст скрипта:
// остановка сервера 1с
sc stop "1C:Enterprise 8.2 Server Agent"
//таймаут 15 секунд
TIMEOUT /T 15 /NOBREAK
//одно время rmngr.exe не останавливался после остановки сервера 1с
//поэтому я ему помогаю это сделать
TASKKILL /f /IM rmngr.exe
//таймаут 10 сек
TIMEOUT /T 10 /NOBREAK
//остановка агента сервера 1с предприятия
sc stop SQLSERVERAGENT
//таймаут 15 сек
TIMEOUT /T 15 /NOBREAK
//остановка mssqlserver
sc stop MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск mssqlsrever
sc start MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск агента mssqlserver
sc start SQLSERVERAGENT
//запуск сервера 1с предприятия
sc start "1C:Enterprise 8.2 Server Agent"
//для тех кто не в теме, если хотите диагностические сообщения из скрипта на русском языке
//используйте кодировку oem866
В результате небольшой модификации все эти проблемы решились, правда добавились некоторые новые, но для меня не существенные:
Немного ловкости рук, циклов, условий и мы получили:
//ИЗМЕНЕННЫЙ код для остановки сервера 1с предприятя
//ссыль, куда мы прыгнем, если у нас остановка не получится с первого раза
:Stop1c
//собственно передача команды остановки службе
rem sc stop "1C:Enterprise 8.2 Server Agent (x86-64)" > NUL
//таймаут 3 сек
TIMEOUT /T 3 /NOBREAK
//проверка службы (остановилась или нет)
sc query "1C:Enterprise 8.2 Server Agent (x86-64)" | find /i "1 STOPPED" > NUL
//если не остановилась, попросим еще раз
if %errorlevel%==1 GoTo Stop1c
//остальные службы по аналогии, запуск с использованием: find /i "4 RUNNING"
Достоинства:
1. запустил и забыл, пока все не будет сделано как положено эта штука не успокоится
Недостатки:
1. На экране полная белиберда, если раньше можно было видеть: "вот тут делалось то-то, а за ним вот это", то теперь сообщений в разы больше и все это гораздо хуже воспринимается
В прикрепленном файле полный текст скрипта, не забываем поменять расширение c .txt на .cmd