gifts2017

Ребутнуть сервер без ребута

Опубликовал vx_gas vx_gas (vx_gas) в раздел Администрирование - Системное

Скриптик для перезапуска сервера 1С предприятия и ms sql server.
Основное назначение: не перегружая сервер полностью, по-быстрому освежить память и прочие ресурсы.

Данный скрипт  я раскопал на просторах интернета в виде "как запустить службу" или "как остановить службу", подкрасил, подмазал, подправил и поставил,  но данные решения в итоге мне не очень подошли по следующим причинам:

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

Скачать файлы

Наименование Файл Версия Размер
RestartServer1c.txt 7
.txt 1,04Kb
20.08.15
7
.txt 1.0 1,04Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Артем Бардюг (Йожкин Кот) 20.08.15 09:31
Не понятно на кого рассчитана статья: если на админа, то увольнять нужно таких админов, которые не знают как службы скриптами перезапускать, если на пользователя, то руки оторвать тому пользователю, который на сервер полезет службы перезапускать.
Evil Beaver; andreask; delete; Fox-trot; roofless; dj_serega; Зеленоград; micha26; 3.14159; tormozit; vasyak319; berezdetsky; Aleksey.Bochkov; AnryMc; +14 Ответить 3
2. Сергей Куликов (ksvd) 20.08.15 09:32
Прикольно, не знал что есть команда TIMEOUT
я у себя использовал
ping -n 30 localhost

И агента указывал через переменные
set ServerAgent="1C:Enterprise 8.2 Server Agent (x86-64)"
sc stop %ServerAgent%

Удобнее менять, если использовать на разных 1С x32 или 8.3
3. vx_gas vx_gas (vx_gas) 20.08.15 10:21
(2) ksvd, понял, спасибо :) хорошая идея
4. Павел И. (3.14159) 20.08.15 11:08
куищще reboot

по-быстрому выкинуть всех пользователей из всех баз :)
5. vx_gas vx_gas (vx_gas) 20.08.15 11:39
(1) Йожкин Кот, как перезапускать топорно любой дурак знает, это понятно, все дело кроется в нюансах, для примера вам комментарий ksvd где используются параметры или мой пост, в котором говорится как это делать эффективней
6. Роман Ложкин (webester) 20.08.15 13:45
(1)Я админ и "надо бы скриптик написать и в шедулер закинуть" и "а надо же было скриптик написать и в шедулер закинуть" длится уже полгода, сейчас закину наконец то. Осталось убедить директора не оставлять на ночь не сохраненную работу, он категорически против рестарта 1с-сервера.
7. Канат Джумадылов (Fox-trot) 21.08.15 14:18
делаете службу MSSQLSERVER зависимой от 1С и тогда скрипт мона умеьшить раза в два
8. Andrew Ko (andreask) 26.08.15 09:27
(1) Йожкин Кот, полностью согласен! Ждите следующей статьи "как просто перезагрузить сервер кнопкой "reset"".
9. Андрей Суровов (Andris_infostart) 26.08.15 18:27
Недостатки:
1. На экране полная белиберда, если раньше можно было видеть: "вот тут делалось то-то, а за ним вот это", то теперь сообщений в разы больше и все это гораздо хуже воспринимается

Разве echo no/off не решает данной проблемы?
10. Евгений Бессонов (_evgen_b) 21.11.15 20:48
Вопрос чайника: насколько страшен перезапуск сервера БД при работающем сервере приложений?
Для чего это нужно: конкретно в моем случае (postgres) при изменении конфигурации сервера БД как я понимаю нужен его перезапуск. Но сеансы пользователей не хочется прерывать.
11. Евгений Бессонов (_evgen_b) 21.11.15 21:50