Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 022 052 раза!

Форум

Добро пожаловать, Гость!

Open Server и ОблачноеХранилище (Dropbox,GoogleDrive,MailDisk,YandexDisk,BTSync)

Советы и рекомендации, полезные инструкции, обмен опытом
Zike
Сообщения: 7
C нами: 2 года 7 мес

Непрочитанное сообщение Zike » 26 апр 2014, 17:44

Если есть задача работать с одним и тем же Open Server на разных компьютерах (к примеру Работа - Дом) можно воспользоваться любым из ныне существующих Облачных сервисов в режиме синхронизации папок. В таком режиме работы существует проблема: Если Open Server одновременно работает на разных компьютерах это может вызвать непредсказуемые нестыковки в работе модулей т.к. по сути они работают с одними и теми же файлами. Далее предлагаю мой вариант решения данной проблемы.
Задача: Обеспечить работу только одного OpenServera в один момент времени.
Решение: Запущенный сервер каждую минуту следит за присутствием файла в определенной папке соответствующего его компьютеру и если его нет завершает свою работу... Соответственно при запуске сервера он должен зачистить в спец папке все файлы "чужых" компьютеров и создать свой, при этом гарантировано через минуту закроются все остальные не нужные копии Open Server на других компьютерах...
Реализация:
Всё в папке "OpenServer\userdata"
-Создаем папку "runtime"
-Создаем файл "pre_start.tpl.bat" с содержанием:
del /f /q %realprogdir%\userdata\runtime\*.runing
del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.stoped
@echo .>%realprogdir%\userdata\runtime\%COMPUTERNAME%.runing

-Создаем файл "post_stop.tpl.bat" с содержанием:
del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.runing
@echo .>%realprogdir%\userdata\runtime\%COMPUTERNAME%.stoped

-Создаем файл "server_test.bat" с содержанием:
@dir %~1\userdata\runtime\%COMPUTERNAME%.runing /a-d >nul 2>nul && (
  ECHO SERVER RUNS OK
) || (   
  "%~1\Open Server.exe" /stop
  "%~1\Open Server.exe" /exit   
)

- В настройках Планировщика Open Server прописываем запуск скрипта проверки каждую минуту:
Время: */1 * * * *
Выполнить: %COMSPEC% /c %realprogdir%\userdata\server_test.bat %realprogdir%

Аватара пользователя
duxabilii
Сообщения: 216
C нами: 5 лет 5 мес
Контакты:

Непрочитанное сообщение duxabilii » 27 апр 2014, 08:52

Только, ИМХО, лучше везде прописывать не %realprogdir%, a %progdir%, так как OpenServer может быть установлен в разные папки на разных компьютерах и тогда скрипты могут правильно не отрабатывать

Zike
Сообщения: 7
C нами: 2 года 7 мес

Непрочитанное сообщение Zike » 27 апр 2014, 09:41

Руководство:
%realprogdir% Реальный путь до папки с Open Server (обратный слеш "\")
%progdir% Генерируемый путь до папки с Open Server с учетом виртуального диска (обратный слеш "\")
Я это понимаю так:
- realprogdir будет всегда указывать на правильное размещение Open Server в какой бы папке он не находился на разных компьютерах.
- progdir будет ссылаться на виртуальный диск и если он не подмонтирован то и пути будут недействительными...
Поправьте если я ошибаюсь.

Аватара пользователя
Максим
Сообщения: 4878
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 27 апр 2014, 10:27

Zike, у вас всё хорошо и правильно, никого не слушайте.

Аватара пользователя
duxabilii
Сообщения: 216
C нами: 5 лет 5 мес
Контакты:

Непрочитанное сообщение duxabilii » 27 апр 2014, 15:05

Zike писал(а):Поправьте если я ошибаюсь.

У меня: OpenServer установлен на одном компе на диск D:\, а на другом на диск F:\. При запуске второй копии подменяется сгенерированный cron.tab и, соответственно, OpenServer не может завершить работу. Вот лог CRON'a
27 Apr 15:01:00 Start: C:\Windows\system32\cmd.exe /c F:\AeroFS\OpenServer\userdata\server_test.bat F:\AeroFS\OpenServer
27 Apr 15:01:00 Start result: 0
27 Apr 15:02:00 Start: C:\Windows\system32\cmd.exe /c F:\AeroFS\OpenServer\userdata\server_test.bat F:\AeroFS\OpenServer
27 Apr 15:02:00 Start result: 0
27 Apr 15:02:30 Load cron.tab
27 Apr 15:03:00 Start: C:\Windows\system32\cmd.exe /c F:\AeroFS\OpenServer\userdata\server_test.bat D:\AeroFS\OpenServer
27 Apr 15:03:00 Start result: 0
27 Apr 15:04:00 Start: C:\Windows\system32\cmd.exe /c F:\AeroFS\OpenServer\userdata\server_test.bat D:\AeroFS\OpenServer
27 Apr 15:04:00 Start result: 0



Максим, может нужно добавить такой функционал в OpenServer, чтобы при запуске проверялось на запуск на разных компьютерах и при выявлении одновременно запущенных процессов спрашивало: "OpenServer запущен на нескольких компьютерах. Закрыть остальные копии?"

Zike
Сообщения: 7
C нами: 2 года 7 мес

Непрочитанное сообщение Zike » 27 апр 2014, 17:41

Да, duxabilii, Вы правы, данная реализация не совсем корректна потому что всё же некоторое время сервера работают одновременно и случаются накладки... Вариант с %progdir% тоже не везде проходит - у многих не создается виртуальный диск. Я вижу такой вариант решения: Либо ручками удалять все файлы в userdata\runtime и выдержать паузу минуту на крон и скажем еще минуту-две на гарантированую синхронизацию всех измененых файлов с удаленного компа и только потом запускать сервер на новом компе, ну или всё тоже самое вставив паузу в файл pre_start.tpl.bat к примеру командой
ping -n %SEC% 127.0.0.1 > NUL
где вместо %SEC% прописать количество секунд плюс один... Почему именно ping, а не sleep или timeout, дело в том что ping гарантировано отработает на всех Windows.

А еще еслиб Open Server отрабатывал дополнительные батники во время запуска и завершения работы OpenServer.exe и скажем крон по галочке можно было бы запускать не только когда запущен сервер но и когда он остановлен при работающем OpenServer.exe можно было бы более гибче настроить систему скажем на автоматический или удаленный запуск

Аватара пользователя
duxabilii
Сообщения: 216
C нами: 5 лет 5 мес
Контакты:

Непрочитанное сообщение duxabilii » 27 апр 2014, 20:42

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

Или можно попробовать запускать openServer через BAT-файл
del /f /q %CD%\userdata\runtime\*.runing
del /f /q %CD%\userdata\runtime\%COMPUTERNAME%.stoped
@echo .>%CD%\userdata\runtime\%COMPUTERNAME%.runing
ping -n 61 127.0.0.1 > NUL
"%CD%\Open Server.exe" /start

Zike
Сообщения: 7
C нами: 2 года 7 мес

Непрочитанное сообщение Zike » 28 апр 2014, 20:30

Вот еще один вариант:
pre_start.tpl.bat
REM Удалили все файлы *.check, Даем команду на закрытие сервера
del /f /q %realprogdir%\userdata\runtime\*.check
del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.runing

REM Ожидаем остановки серверов (отсутствие *.runing)
:check
@dir %realprogdir%\userdata\runtime\*.runing /a-d >nul 2>nul && (
  ping -n 1 127.0.0.1 > NUL
  goto :check
)
 
REM Делаем паузу на синхронизацию
ping -n 10 127.0.0.1 > NUL

REM Создаем свои файлы   
del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.stoped
@echo .>%realprogdir%\userdata\runtime\%COMPUTERNAME%.runing
@echo .>%realprogdir%\userdata\runtime\%COMPUTERNAME%.check


post_stop.tpl.bat
@del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.check
@del /f /q %realprogdir%\userdata\runtime\%COMPUTERNAME%.runing
@echo .>%realprogdir%\userdata\runtime\%COMPUTERNAME%.stoped


server_check.bat
@set count=1
:cikl
@dir %~1\userdata\runtime\%COMPUTERNAME%.check /a-d >nul 2>nul && (
  if %count% LEQ 3 ( 
    @echo Cikl %count%   
    @ping -n 20 127.0.0.1 > NUL
    @set /a count+=1   
    goto :cikl
  ) 
) || (   
  "%~1\Open Server.exe" /exit   
)


Планировщик
%COMSPEC% /c %realprogdir%\userdata\server_check.bat "%realprogdir%"


Как работает.
Т.к. сервер не запустится до тех пор пока не отработает pre_start.tpl.bat мы можем в этом батнике ожидать закрытия других копий Open Server - ждем пока не исчезнут все "*.runing", делаем паузу на синхронизацию с облаком и запускаем нашу копию сервера. Сервер создает два файла %COMPUTERNAME%.check и %COMPUTERNAME%.runing.
%COMPUTERNAME%.check - по его отсутствию в планировщике узнаем надо ли нам закрывать свою копию сервера и по факту как закроем удаляем свой %COMPUTERNAME%.runing по отсутствию которого другой сервер поймет что можно уже запускаться...

server_check.bat - в планировщике проверяет нужно ли закрывать сервер (отсутствует %COMPUTERNAME%.check). За один запуск проверяет три раза с паузой в 20 секунд (на 0 секунде, 20 секунде, 40 секунде) тем самым обходим ограничение крона в 1 минуту

Аватара пользователя
Максим
Сообщения: 4878
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 11 июн 2014, 20:25

duxabilii писал(а):Максим, может нужно добавить такой функционал в OpenServer, чтобы при запуске проверялось на запуск на разных компьютерах и при выявлении одновременно запущенных процессов спрашивало: "OpenServer запущен на нескольких компьютерах. Закрыть остальные копии?"


1) Я вижу другой выход из этой проблемы - выключать Open Server на работе, когда идёшь домой. Тогда и не нужно будет извращаться с батниками.

2) Если же первый пункт не осуществим по разным причинам (например не знаю в каком корпусе буду когда закончится рабочий день, отпустили раньше, всех вызвали на субботник пока я был в столовой, набухался на работе и пошел домой и т.д.) то в этом случае прекрасно помогает удалённая панель управления Open Server. Пришел домой - зашел в панельку, выключил тот Open Server который на работе, включил домашний.

Вот и всё.

Аватара пользователя
nick
Сообщения: 115
C нами: 5 лет 2 мес
Откуда: Россия
Контакты:

Непрочитанное сообщение nick » 11 июн 2014, 21:08

:) А я через teamviewer выключаю дома/на работе и все.


Вернуться в «Полезные советы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость