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

Скриптик для перезапуска сервера 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 не будет опубликован. Обязательные поля помечены *