Добрый день уважаемые коллеги.
Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):
а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);
б) остановить другое приложение работающее на этом же сервере; в) получить информацию о том, запущено или нет в данный момент некоторое приложение.
Несколько слов о том, как возникла такая необходимость.
В данный момент на хостинге расположен AWS сервер main.exe
Я постоянно вношу обновления и поэтому каждый раз необходимо останавливать сервер main.exe, перезаливать новую версию и снова его запускать.
При этом каждый раз мне приходиться просить администратора остановить и заново запустить main.exe.
Дополнительный доступ на свой сервер он мне давать не очень-то хочет, поэтому я расчитываю решить проблему следующим образом:
На сервере будут работать одновременно два AWS сервера - один admin.exe а другой main.exe (порты они слушают разные).
При этом admin.exe будет управлять запуском и остановкой main.exe Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.
К сожалению я не нашел среди набора функций пакета Ada.Command_Line тех функций, которые могут решить эти задачи.
Буду очень благодарен за помощь. Спасибо!
С уважением,
Иван
Ivan Kohan wrote:
Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):
а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);
б) остановить другое приложение работающее на этом же сервере;
в) получить информацию о том, запущено или нет в данный момент
некоторое приложение.
Стандартными средствами такое наверное не сделать. Слишком уж механизмы запуска остановки приложений отличаются на разных платформах. Раз речь идёт о MS Windows, то начать наверное стоит с пакета Win32Ada; и если там не будет готовых средств - писать собственную связку к WinAPI.
День добрый!
Если под MS Windows то самый простой вариант в файле архива.
With best regards
Sergey Kirkorov www.mediascan.by
Email: ksiby@...
----- Original Message -----
From: Ivan Kohan
To: ada_ru@yahoogroups.com
Sent: Thursday, October 29, 2009 12:52 PM
Subject: [ada_ru] Какую библиотеку лучше использовать для работы с внешними приложениеми?
Добрый день уважаемые коллеги.
Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):
а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);
б) остановить другое приложение работающее на этом же сервере; в) получить информацию о том, запущено или нет в данный момент некоторое приложение.
Несколько слов о том, как возникла такая необходимость.
В данный момент на хостинге расположен AWS сервер main.exe
Я постоянно вношу обновления и поэтому каждый раз необходимо останавливать сервер main.exe, перезаливать новую версию и снова его запускать.
При этом каждый раз мне приходиться просить администратора остановить и заново запустить main.exe.
Дополнительный доступ на свой сервер он мне давать не очень-то хочет, поэтому я расчитываю решить проблему следующим образом:
На сервере будут работать одновременно два AWS сервера - один admin.exe а другой main.exe (порты они слушают разные).
При этом admin.exe будет управлять запуском и остановкой main.exe Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.
К сожалению я не нашел среди набора функций пакета Ada.Command_Line тех функций, которые могут решить эти задачи.
Буду очень благодарен за помощь. Спасибо!
С уважением,
Иван
а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);
б) остановить другое приложение работающее на этом же сервере;
в) получить информацию о том, запущено или нет в данный момент некоторое приложение.
При этом admin.exe будет управлять запуском и остановкой main.exe
Таким образом я получу панель для удаленного управления своим AWS сервером main.exe.
Запустить можно чем-то вроде system("./main.exe"), правда слэш должен быть ровно такой какой используется в системе. т.е. в винде это будет обратный слэш. system(".\main.exe");
(полагаю аналог system в Аде таки есть).
Остановить своё же приложение разве нельзя просто послав ему по тому чеж tcp что-нибудь вроде "закройся!"? В оном main.exe сделать отдельный поток который будет пасти это сообщение и всё. По приходу убивает всех остальных и убивает себя сам.
Соответственно получить информацию о том запущено ли приложение можно просто послав не "закройся" а какой-нибудь "ping" тому же main.exe (в ответ должен прийти "pong"), который отработает тот же поток что и в предудыщем абзаце. + можно же ж попробовать прибиндиться к тому же tcp-порту что и main.exe (80-ый порт небось, коль AWS), если система скажет -- фигвам, значит main.exe за него уже схватился, а значит запустился.
On Thu, 29 Oct 2009 12:52:52 +0200, you wrote:
Добрый день уважаемые коллеги.
Подскажите пожалуйста, какую из библиотек вы посоветуете использовать, для того, чтобы из работающего Ada приложения (из AWS сервера):
а) запустить другое приложение, находящееся на этом же сервере (и даже в этой же директории);
б) остановить другое приложение работающее на этом же сервере;
в) получить информацию о том, запущено или нет в данный момент некоторое приложение.
1. Под Gtk есть системно-независимый запуск процессов с pipe-ами. Не очень здорово сделан, но работает. В GtkAda его нет, но я сделал поддержку, см. здесь
http://www.dmitry-kazakov.de/ada/gtkada_contributions.htm
2. В GNAT библиотеке есть рудиментарная поддержка запуска - ожидания, но без "пипсов". См. System.OS_Lib.
Остановить, опросить нельзя. Можно ждать окончания. Так что придется делать интерфейс - через "пипсы" или multi-cast сокеты типа - "я тут, кто еще?" между процессами участниками.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
Уважаемые коллеги, большое спасибо за помощь!
Теперь на выходных смогу выбрать оптимальное решение и реализую его.
С уважением,
Иван
29 октября 2009 г. 15:39 пользователь Dmitry A. Kazakov <
alt@dmitry-kazakov.de> написал:
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти