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

Скриптик для перезапуска сервера 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

11 Comments

  1. Йожкин Кот

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

    Reply
  2. ksvd

    Прикольно, не знал что есть команда TIMEOUT

    я у себя использовал

    ping -n 30 localhost

    И агента указывал через переменные

    set ServerAgent=»1C:Enterprise 8.2 Server Agent (x86-64)»

    sc stop %ServerAgent%

    Удобнее менять, если использовать на разных 1С x32 или 8.3

    Reply
  3. vx_gas

    (2) ksvd, понял, спасибо 🙂 хорошая идея

    Reply
  4. 3.14159

    куищще reboot

    по-быстрому выкинуть всех пользователей из всех баз 🙂

    Reply
  5. vx_gas

    (1) Йожкин Кот, как перезапускать топорно любой дурак знает, это понятно, все дело кроется в нюансах, для примера вам комментарий ksvd где используются параметры или мой пост, в котором говорится как это делать эффективней

    Reply
  6. webester

    (1)Я админ и «надо бы скриптик написать и в шедулер закинуть» и «а надо же было скриптик написать и в шедулер закинуть» длится уже полгода, сейчас закину наконец то. Осталось убедить директора не оставлять на ночь не сохраненную работу, он категорически против рестарта 1с-сервера.

    Reply
  7. Fox-trot

    делаете службу MSSQLSERVER зависимой от 1С и тогда скрипт мона умеьшить раза в два

    Reply
  8. andreask

    (1) Йожкин Кот, полностью согласен! Ждите следующей статьи «как просто перезагрузить сервер кнопкой «reset»».

    Reply
  9. Andris_infostart

    Недостатки:

    1. На экране полная белиберда, если раньше можно было видеть: «вот тут делалось то-то, а за ним вот это», то теперь сообщений в разы больше и все это гораздо хуже воспринимается

    Разве echo no/off не решает данной проблемы?

    Reply
  10. _evgen_b

    Вопрос чайника: насколько страшен перезапуск сервера БД при работающем сервере приложений?

    Для чего это нужно: конкретно в моем случае (postgres) при изменении конфигурации сервера БД как я понимаю нужен его перезапуск. Но сеансы пользователей не хочется прерывать.

    Reply
  11. _evgen_b

    (10) _evgen_b, ой, все.

    Сам спросил, сам и нашел ответ: http://www.heatware.net/databases/postgresql-reload-config-without-restarting/

    А так можно посмотреть текущие настройки: http://dba.stackexchange.com/questions/35814/how-to-view-the-current-settings-of-autovacuum-in-postgres

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *