Научите, как сервис под винду писать.
Сервисы под Borland не писал, но, судя по всему, сервис должен адекватно реагировать на всякие запросы системы (типа shutdown/restart). Поведение и формат запросов описаны в MSDN.
Читаю пока потихоньку...
Так реализуй подмножество протокола http, для этого, наверное, есть стандартные компоненты. В Delphi же через Indy делалось взаимодействие с сетью, туда и надо смотреть. Остальное — задачи технические.
С этим согласен, на Indy уже нацелился. Но это компонент в проекте. А проект бывает либо приложением, либо сервисом. Насколько я понимаю, обычное приложение нельзя инсталлировать. Вот потому с сервисами начал разбираться.
Серверу совершенно не обязательно быть сервисом. И вовсе не зачем его инсталлировать.
ПО логике задача сервера с точки зрения ОС проста - прописаться в автозагрузку и висеть всё время в системе запущенным, пока включен комп.
Разве нет?
Тем более что ты пишешь на Борланд С++.
Прописаться в авто загрузку - там 5 строчек. ну мб еще копирнуть себя в системную папку, если запущен не из неё - тоже строчек 5. итого вся функциональность свзяанная с постоянным присутствием в системе решается в 10 строчек. Зачем тебе Service вообще не понятно
руки поотрывать тем, кто на это делает ставку, языки повырывать тем, кто это советует.
Автозагрузка не даст гаратнии запуска после загрузки системы.
Автозагрузка не даст гаратнии запуска после загрузки системы.Еще надо учесть, что из под юзера в современных системах многое делать не получится. А вот сервисы запускаются с нормальными правами. Например, выделение физической памяти, это если так, навскидку, довольно полезная штуковина, если хочешь ускорить время отклика. Хотя от файлового сервера это, может быть, и не требуется особо.
Под вашу задачу точно варианта апач+пхп/перл+БД+скриптик не хватит? Ведь настройка вышеперечисленного ПО + написание скриптика и верстка нескольких шаблонов страниц - гораздо более простая задача, нежели написание целого выделенного сервиса, пусть даже с использованием компонент. Да и скрипт можно в любой момент подправить без приостановки апача, что не получится с Win32-сервисом.
Поясню, в чем горячка была.
Сервер, по большому счету уже был готов. Я его делал приложением обычным. Начальство в какой-то момент порешило, что лучше не рассчитывать на таланты инженеров заказчиков (например, в случае перестановки или чистки оси) и сделать все по минимуму зависящим от сторонних ручонок. В частности поэтому сервис. Ну, и вообще так кошернее — об этом писали до меня.
Почему Борланд? Исходники передаем. В ТЗ требование: "Писать, чтоб нашим программистам было в кайф. ПлюсЫ и проекты Борланд."
Сейчас принял такое решение:
- завел проектик типа Service Application в Борланде;
- на него кинул IdTCPServer;
- в его event OnExecute влил содержимое уже написанного сервера.
Потом, собственно, инсталляция того, что скомпилировалось.
, спасибо за пример
И за конкретную ссылку на МСДН тож благодарю. Еще не проверял, но посмотрю.
Еще вопрос такой возник. Посмотрел, как сервер InterBase работает. У него кроме сервера есть ещё Guardian. Он вроде как запускает сервер и может его перезапустить, если подвиснет. Как такое делается? И еще задумался, что было бы здорово уметь перезапустить сервис с удаленной машины, если он повиснет. Но ни черта не понимаю, как это проверять и реализовывать.
И вообще по мелочам куча всего всплывает. Может, кто книгу насоветует для ликбеза?
И еще задумался, что было бы здорово уметь перезапустить сервис с удаленной машиныВсё уже продумано до тебя, net help.
Некоторые софтописатели пишут watch-dog, который постоянно контролирует состояние основного процесса и при его завершении запускает вновь. Но вообще можно при установке сервиса настроить поведение при первом, втором и последующем сбоях.
Заставить пользователя не только логиниться, но еще и саму программы вручную запускать.Это зависит от заказчика. ведь твоя задача , заработать как можно больше денег
Он вроде как запускает сервер и может его перезапустить, если тот повиснет. Как такое делается?Я для своего сервера (не виндосервиса) такое организовывал через Shared Memory. Вообще, имхо, сильно зависит от симптомов падения сервера: накрывается процесс или просто перестаёт выполнять основные функции.
Я для своего сервера (не виндосервиса) такое организовывал через Shared Memory.Такое надо реализовывать не через shared memory, а через тестирование тех самых основных функций. Кладём в крон задачу проверки работоспособности сервиса, она, например, в случае веб-сервера - заходит на него, отправляет запрос, получает ответ (если получает сравнивает его с тем, что должно было быть; если что-то не так - перезапускает (это если мы хотим, чтобы такие вещи были на автомате).
Кладём в крон задачу проверки работоспособности сервиса, она, например, в случае веб-сервера - заходит на него, отправляет запрос, получает ответ (если получает сравнивает его с тем, что должно было бытьэто так называемая активная диагностика - она не всегда возможна.
простейший пример невозможности: доступ к системе возможен только под конкретным пользователем, все входы записываются:
делать возможность активной диагностики без доступа через пользователя - это дырка в безопасности,
заводить какого-то отдельного юзера под диагностику- тоже не комильфо, т.к. он потом будет мешаться при работе.
кому он будет мешать?
кому он будет мешать?тому кто управляет пользователями.
допустим - юзеры, вообще, в домене должны лежать, домен строится на основе орг.структуры, тогда получается что этого тестового юзера надо аж в орг.структуру прописать.
вроде всякие домены/АД etc придумывались для того чтобы облегчить жизнь при создании пользователя, а у тебя получается что это лишняя надстройка, которая только мешает всем нормально жить и работать.
вроде всякие домены/АД etc придумывались для того чтобы облегчить жизнь при создании пользователяпроблема не в домене.
проблема в желании - иметь пользователя, который на самом деле не пользователь.
ну хз, у меня таких 38 (при общем числе записей в /etc/passwd 48) меня это нисколько не напрягает.
проблема в желании - иметь пользователя, который на самом деле не пользователь.Да, действительно, очень нехорошее желание.
Да, действительно, очень нехорошее желание.это аккаунты, а не пользователи.
пользователя отличает от аккаунта: наличие фио, привязка к орг. структуре, выданные бизнес-роли и т.д.
ps
вот такая надпись мне бы не понравилась при заходе в "корпоративное хранилище":
документ "устав компании" был изменен пользователем IUSR.
т.е. при помощи домена можно управлять пользователями, но не нельзя аккаунтами?
Было бы еше чудно понимать, что сервер подвис и его перезапускать.Это особенность современного программирования - в архитектуре системы предусматривать watchdog?
Это особенность современного программирования - в архитектуре системы предусматривать watchdog?если планируется 24x7, то в обязательном порядке - в первую очередь.
т.е. при помощи домена можно управлять пользователями, но не нельзя аккаунтами?а чуть подумать?
речь шла о том, что тестирующему модулю нужен именно пользователь, а не аккаунт.
Пипец... Как можно отдавать в 24x7-продакшн приложение, которое требует присмотра за собой? Кто-нибудь видел watchdog за апачем например, или за mysql?
Как можно отдавать в 24x7-продакшн приложение, которое требует присмотра за собой? Кто-нибудь видел watchdog за апачем например, или за mysql?Поэтому у нас есть специальный крон, который проверяет, что апач не упал, и в случае падения шлёт смски, чтобы кто-нибудь зашёл на сервер, руками посмотрел, в чём дело, и перезапустил апач, если нужно.
Такие смскиприходят не очень часто, но всё-таки приходят.
можно отдавать в 24x7-продакшн приложение, которое требует присмотра за собой? Кто-нибудь видел watchdog за апачем например, или за mysql?навскидку
google: apache watchdog
google: mysql watchdog
ps
watchdog часто делается на коленке: через пользователей + горячий телефон + дежурный админ, но это не самое лучшее решение
Пипец... Как можно отдавать в 24x7-продакшн приложение, которое требует присмотра за собой? Кто-нибудь видел watchdog за апачем например, или за mysql?а если по существу: жизнь сложная штука, и херотень(непредусмотренная ситуация) встречается всегда.
поэтому в обязательном порядке должен быть кто-то кто разбирается с этой непредвиденной ситуацией.
на watchdog как раз обычно и вешается разбирательство с непредвиденной ситуацией.
ps
и вообще - как-то странно утверждать, что программисты mysql/apache и т.д. могли предусмотреть вчера все то, что у тебя будет на твоем компьютере сегодня.
PS у нас тоже есть такая подсистема (Zabbix которая мониторит все сервисы продакшн-системы, логи и прочее, и шлёт смски. И даже есть специальный отдел Monitoring, который круглосуточно вручную проверяет работоспособность сервисов. Но никому и в голову не приходит делать перезапуск системы в случае падения автоматическим. Потому что это в обязательном порядке должно делаться вручную: сбор логов, анализ причины сбоя, если возможно - то устранение, затем написание баг-репорта и прочее.
Но никому и в голову не приходит делать перезапуск системы в случае падения автоматическим.а в это время АЭС идет вразнос? или чем там у вас система занимается?
Потому что это в обязательном порядке должно делаться вручную: сбор логов, анализ причины сбоя, если возможно - то устранение, затем написание баг-репорта и прочее.
Но никому и в голову не приходит делать перезапуск системы в случае падения автоматическим. Потому что это в обязательном порядке должно делаться вручную: сбор логов, анализ причины сбоя, если возможно - то устранение, затем написание баг-репорта и прочее.в моем понимании, так делается там - где все ориентировано ради удобства админов/разработчиков, и где нет ориентации на пользователя.
пользователю в первую очередь надо, чтобы сейчас все работало, а потом уже разбирательство - почему был сбой.
и вообще - как-то странно утверждать, что программисты mysql/apache и т.д. могли предусмотреть вчера все то, что у тебя будет на твоем компьютере сегодняПонятно, что нет. Всякое случается. Но решать проблему падений методом встроенного watchdog, который просто перезапускает сервис - это по-моему явный пример плохого архитектурного дизайна. Тут гораздо лучше оставить способ оповестить о своём падении внешнюю программу (heartbeat, keepalive-log etc) и позволить администратору программного решения внести твой сервис в общую мониторинговую систему, чем самому заниматься самодеятельностью.
Но решать проблему падений методом встроенного watchdog, который просто перезапускает сервис - это по-моему явный пример плохого архитектурного дизайнаесли речь идет про windows-сервисы, то примитивный watchdog - видя, что происходит херня, должен просто ронять/прибивать сервис.
а вот что происходит дальше (перезапуск, оповещение кого-либо и т.д. уже делается через стандартные средства
Ну все приведённые тобой примеры из гугла - как раз watchdog на коленке (то есть сторонние проекты).но я о том, что если google полон страниц о mysql/apache watchdog, то, наверное, не все так хорошо, как ты описываешь.
и даже mysql/apache требуется внешний watchdog, который следит за их работоспособностью.
Как можно отдавать в 24x7-продакшн приложение, которое требует присмотра за собой? Кто-нибудь видел watchdog за апачем например, или за mysql?
а в это время АЭС идет вразнос? или чем там у вас система занимается?Конечно нет, в это время работает резервная подсистема (во всяком случае у нас, не уверен за АЭС).
Потому что перезапускать систему, которая только что упала, не разобравшись, почему она упала, в некоторых случаях может быть гораздо опаснее, чем не запускать её вовсе, особенно если причина падения - системный сбой. Например, нарушена целостность области кода в результате переполнения буфера. В этот раз программа просто упала, и сработала резервная система, АЭС в порядке. А в следующий начнёт работать с искаженной логикой, и об этом никто не узнает, пока АЭС не ебнет к чертям.
а вот что происходит дальше (перезапуск, оповещение кого-либо и т.д. уже делается через стандартные средстваВ таком виде согласен. Просто топикстартер описал именно решение "упало - перезапустим", против которого я и не согласен.
Но никому и в голову не приходит делать перезапуск системы в случае падения автоматическимЕстественно. Я там и написал - "если нужна именно автоматическая перезагрузка".
Ты тут говоришь про апач и mysql - а что, думаешь, эта поделка топикстартера сравнима с ними по отлаженности?
а в это время АЭС идет вразносА если перезапустить сервис - то не пойдёт?
про пользователя вроде сказал первым ты.
не знаю как в венде, а в нормальных системах с поставленной задачей справится и аккаунт.
Конечно нет, в это время работает резервная подсистема (во всяком случае у нас, не уверен за АЭС).а если резервная тоже накрывается? то что дальше?
не знаю как в венде, а в нормальных системах с поставленной задачей справится и аккаунт.не справится, потому что если сервис изначально разрабатывался под работу с пользователями, а не с аккаунтами, то при заходе через аккаунт сервис нормально работать не будет.
соответственно не понятно, что именно будет проверять watchdog.
А если перезапустить сервис - то не пойдёт?может и пойдет, а может и не пойдет.
но если по ошибке наварачивается основная система, то все становятся слепы и глухи.
А в следующий начнёт работать с искаженной логикой, и об этом никто не узнает, пока АЭС не ебнет к чертям.а вот это уже плохая архитектура, которая провоцирует работу с искаженной логикой.
Например, нарушена целостность области кода в результате переполнения буфера. В этот раз программа просто упала, и сработала резервная системамне пока непонятно, какой человек и с какой квалификацией будет 1 января в 2:00 разбираться с этой проблемой на АЭС в урюпинске?
мне пока непонятно, какой человек и с какой квалификацией будет 1 января в 2:00 разбираться с этой проблемой на АЭС в урюпинске?Системный администратор. В 2:00 ему позвонили и сказали об ахтунге, к 2:05 он опохмелился и разбирается с проблемой.
Системный администратор. В 2:00 ему позвонили и сказали об ахтунге, к 2:05 он опохмелился и разбирается с проблемой.каким образом и как он будет разбираться почему ушел в отказ модуль "сделать чтобы АЭС работала.exe"?
я правильно понимаю, что он пару минут в него повтыкает, а потом его просто перезапустит?
Тупо перезапустить/переключить управление вполне осилит и тот кто позвонил ему.
Да, возможно, в некоторых случаях ничего нигде исправлять не нужно будет, и достаточно будет просто перезапустить модуль. Но не во всех.
Кто-нибудь видел watchdog за апачем например, или за mysql?в яндексе делают
- тот модулек, который запускает и следит за работой сервера, разбирает от него эксепшены;
- глазами смотреть журнал событий, если неприятности часты.
Если все херня и слона едят не так, научите. Спасибо скажу.
Еще вопрос прозаичный. Как решается такой философский нюанс: программка, которая должна следить за сервисом (процессом, другой программой дожна быть надежнее, чем сам сервис. Т.е. почему не бывает надсмотрщика за надсмотрщиком?
В таком виде согласен. Просто топикстартер описал именно решение "упало - перезапустим", против которого я и не согласен.
тот модулек, который запускает и следит за работой сервера, разбирает от него эксепшены;Глазами смотреть журнал событий, если произошла не та ошибка, с которой мы уже умеем что-то делать автоматически.
- глазами смотреть журнал событий, если неприятности часты.
Если все херня и слона едят не так, научите.
Как решается такой философский нюанс: программка, которая должна следить за сервисом (процессом, другой программой дожна быть надежнее, чем сам сервис.Чем программа проще - тем меньше в ней ошибок. Если твой сторож слишком сложный - пишешь ещё одного, который будет следить за этим, и в случае его падения сразу сообщать администратору.
Как решается такой философский нюанс: программка, которая должна следить за сервисом (процессом, другой программой дожна быть надежнее, чем сам сервис. Т.е. почему не бывает надсмотрщика за надсмотрщиком?в MS SQL есть MS SQL Agent, который за ним следит. а MS SQL следит за Agent'ом.
Охрененно кайфно, когда в первый раз что-то делаешь.
Пользуясь случаем, всем передаю спасибы.
watchdog'ов не писал, бо ещё не разбирался. Рабочесть сервера решена аккуратной проверкой кода и тестированием.
Рабочесть сервера решена аккуратной проверкой кода и тестированием.Тебе сколько лет?
Гарантировать рабочесть более-менее сложного сервера в реальной жизни, с реальными непредсказуемыми данными на входе - нельзя.
Рабочесть сервера решена аккуратной проверкой кода и тестированием.Код библиотек стройки тоже вычитывали?
Надсмотрщик тоже делаю.
верните программирование от инженеров - учёным математикам, глядишь и надёжные сервера появятся
Ага - очень надёжный сервер, очень надёжно считающий 2*2.
интересно, и что эти полтора математика на-программируют?
http сервер минималистичный. Я вот смотрел lapack - вещь достаточно сложная, но надёжная и быстрая
и какую ты видишь связь между реализацией сотню лет извезтных математических алгоритмов и программированием?
сотню лет извезтных математических алгоритмовпруфлинк. Большинство алгоритмов вычислительной математики были разработаны не настолько уж и давно
что этот минималистичный сервер должен уметь, на твой взгляд?Надёжно и быстро считать синус x и сортировать массивы.
Оставить комментарий
Yzzi
Ни разу не делал, научите.Нужно соорудить специализированный сервер, раздающий файлы. Сервер должен запускаться автоматически после загрузки системы. Так понимаю, что надо его делать сервисом и инсталлировать. Было бы еше чудно понимать, что сервер подвис и его перезапускать. Как это делать, тож не особо представляю (Отдельное приложение, которое регулярно на него запросики отсылает?)
Разрабатывается эта радость под xp и server 2003. Пишу на Borland c++. Там есть тип проектов Service и Service Application. Они годятся? Как такие задачи вообще культурно решаться должны?