Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как запустить выполнение программы.exe на сервере?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): [1] 2 3 4 »   

> Описание: требуется помощь.
MoNSTRiK
Отправлено: 25 Января, 2010 - 16:59:15
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Приветствую.

Встала резкая проблема.
Требуется при помощи php или каких либо других средств, но желательно php, заставить windows запустить программу и начать её выполнение так, как это обычно происходит при запуске мышкой.

Пример:
Существует файл, который запускает игровой сервер по CS.


Искал в интернете и нашёл способы, но они не корректно работают для запуска сервера.

№1 самый логичный.


Скрипт запускает консоль, но при запуске выводится, что невозможно загрузить файл hlds.exe, так как в файле start не верно путь указан и выполнение идёт не так. Но при обычном запуске файла start, сервер кс запускается.

если же мы сразу напишем, всё то что запускай hlds.exe в файле start
и поставим путь верный к hlds.exe
PHP:
скопировать код в буфер обмена
  1. system('"start "Counter-Strike 1.6 Server" /MIN/HIGH D:/server/hlds.exe -game cstrike +port 27014 +map de_dust2 +maxplayers 16  -noipx +sv_lan 0 -insecure -console
  2. "');

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

нашёл тако код, но не разобрался, что конкретно за что отвечает:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. system("killall hlds_run; killall hlds_i486");
  3. sleep(5);
  4. system("cd /home/скрыта/; ./hlds_run -game cstrike +maxplayers 32 +ip 91.194.10.118 +port 27010 +map de_dust2 -nomaster +sv_lan 1 > /home/скрыта/cstrike/logs/27010.log&");
  5. ?>

автор сказал что у него всё пашет.... не смог догнать пути, для чего какой и тп. особенно этот "cd /home/скрыта/"

Есть мысли?
 
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 17:35:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




MoNSTRiK пишет:
не смог догнать пути, для чего какой и тп. особенно этот "cd /home/скрыта/"

Это просто никсовые пути. Считайте, что для вашего случая "/home/скрыта/" равноценна "D:/server/"

В общих словах идея такая:
1) сменить каталог силами командной оболочки на тот, откуда надо запускать hlds.exe
2) запускать стандартно


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 25 Января, 2010 - 17:48:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MoNSTRiK пишет:
Скрипт запускает консоль, но при запуске выводится, что невозможно загрузить файл hlds.exe, так как в файле start не верно путь указан и выполнение идёт не так. Но при обычном запуске файла start, сервер кс запускается
Наверное потому что надо установить правильно рабочую папку - например с помощью обычного cd /папка и тогда уже запускать cmd-файл
Кроме того приведенный от кого-то автора код не будет работаь потому что там UNIX и в windows в частности не будет работать killall (Что немаловажно при перезапуске демонов) И помимо того в UNIXе с помощью перенапрявления вывода в файл > и оператора & обеспечивается фоновый режим - в windows для этого служит start
Таким образом задача несколько усложняется - во-первых надо проверять наличие процессов с помощью tasklist и удалять их taskkill - во-вторых при запуске надо запускать bat-файл который будет устанавливать рабочую папку и делать дальнейший запуск Вероятно надо прописывать часть переменных окружения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MoNSTRiK
Отправлено: 25 Января, 2010 - 18:22:35
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




JustUserR

Очень помог! Улыбка разобрался

вот что получилось:
PHP:
скопировать код в буфер обмена
  1. system('cd ./server/ & start "Counter-Strike 1.6 Server" /MIN/HIGH hlds.exe -game cstrike +port 27014 +map de_dust2 +maxplayers 16 +rcon_password 123456 -noipx +sv_lan 0 -insecure -console
  2. ');


Встала другая проблема.
При запуске сервера всё работает и грузится, вот только страница с которой произошёл запуск остаётся работать. Видима обмен пакетами идёт или ещё что. Как можно этого избежать? Чтобы сервер запускался и скрипт забывал про дальнейшую работу с ним.

(Отредактировано автором: 25 Января, 2010 - 19:06:56)

 
 Top
EuGen Администратор
Отправлено: 25 Января, 2010 - 18:26:13
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Команда не должна выполнять вывод, иначе скрипт будет ожидать окончания работы.
Соответственно перенаправьте вывод в какой-либо файл.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
MoNSTRiK
Отправлено: 25 Января, 2010 - 19:05:07
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




EuGen пишет:
Команда не должна выполнять вывод, иначе скрипт будет ожидать окончания работы.
Соответственно перенаправьте вывод в какой-либо файл.


подскажите, как можно это реализовать?

чем дополнить данный код?
PHP:
скопировать код в буфер обмена
  1. system('cd ./server/ & start "Counter-Strike 1.6 Server" /MIN/HIGH hlds.exe -game cstrike +port 27014 +map de_dust2 +maxplayers 16 +rcon_password 123456 -noipx +sv_lan 0 -insecure -console');

(Отредактировано автором: 25 Января, 2010 - 19:06:36)

 
 Top
Champion Супермодератор
Отправлено: 25 Января, 2010 - 20:04:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




> /dev/null &
 
 Top
MoNSTRiK
Отправлено: 25 Января, 2010 - 20:07:04
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Champion пишет:
> /dev/null &


прописал:
PHP:
скопировать код в буфер обмена
  1. system("cd ./server/ & start.cmd > /dev/null&");


Теперь сервер не запускается. на секунду появляется окно и тут же закрывается.
что не так?

(Отредактировано автором: 25 Января, 2010 - 20:23:25)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Января, 2010 - 21:35:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Champion, у MoNSTRiK винда на хосте ;)

MoNSTRiK, под виндой /dev/null отсутствует. Попробуйте дописать > log.txt &
Я, правда, не уверен, что сработает - с командной строкой виндов не разбирался.


-----
PostgreSQL DBA
 
 Top
MoNSTRiK
Отправлено: 25 Января, 2010 - 22:08:30
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Мелкий пишет:
Champion, у MoNSTRiK винда на хосте ;)

MoNSTRiK, под виндой /dev/null отсутствует. Попробуйте дописать > log.txt &
Я, правда, не уверен, что сработает - с командной строкой виндов не разбирался.


Да, винда. Забыл сказать.

раньше пытался так написать:
PHP:
скопировать код в буфер обмена
  1. system("cd ./server/ & start.cmd > log.txt&");

как в варианте который в инете нашёл.

Но по прежнему браузер крутит.

Но при этом идёт запись в файл и не останавливается.

данный скрипт будет стоять (работать) на Windows Server 2008
 
 Top
JustUserR
Отправлено: 26 Января, 2010 - 00:58:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MoNSTRiK Для того чтобы PHP-скрипт перестал висеть необходимо запускать его с перенаправление в >nul (Под windows) Но при этом проблема заключается в том что может и так не получиться - ведь под windows знак & является просто объединением команд и не запускает фонового режима (На всякий случай можете добавить 2>&1 >nul чтобы перекрыть и поток ошибок)
Если по закрытии страницы сервер все равно остается работать то можете поставить просто поменьше time_limit - а если же суть имено в том чтобы запустить daemon и продолжить работу то можете еще попробовать открыть процесс с помощью popen


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MoNSTRiK
Отправлено: 26 Января, 2010 - 02:07:57
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




JustUserR пишет:
... открыть процесс с помощью popen


Спасибо!!! я понял.

Решение вот:


так как не очень много практики и опыта, заюзал не ту функцию.

Сервер запускается и скрипт тут же заканчивает работу.

Всем спасибо, кто участвовал в моём образовании Улыбка))

Респект парни!
 
 Top
JustUserR
Отправлено: 26 Января, 2010 - 12:59:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MoNSTRiK пишет:
Открыть процесс с помощью popen
Спасибо!!! я понял.
Пожалуйста! Когда решите написать PHP-скрипт удаленного завершения сервера обращайтесь Подмигивание


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
MoNSTRiK
Отправлено: 27 Января, 2010 - 00:35:22
Post Id



Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2009  


Помог: 0 раз(а)




Цитата:
Пожалуйста! Когда решите написать PHP-скрипт удаленного завершения сервера обращайтесь


Вот, это был бы мой следующий вопрос! Улыбка)) и тема. Ну раз уж затронули данную тему.

Расскажите как это реализовать, на примере, если не сложно. А то я чувствую, что ещё сутки поисков я не выдержу Улыбка))
 
 Top
JustUserR
Отправлено: 27 Января, 2010 - 01:24:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




MoNSTRiK пишет:
Вот, это был бы мой следующий вопрос! )) и тема. Ну раз уж затронули данную тему. Расскажите как это реализовать, на примере, если не сложно. А то я чувствую, что ещё сутки поисков я не выдержу ))
Собственно говоря вся суть PHP-скрипта для остановки daemon-а заключается в том чтобы получить номер процесса и этот процесс удалить
Если на вашем сервере в консоли есть утилиты tasklist и taskkill то все предельно просто - вы сначала вызываете tasklist с заданием фильтра по имени образа или имени исполняемого файла и получаете ID процесса и потом передаете его в taskkill и завершаете соответствующий процесс ПО сути дела достаточно даже одного taskkill так как он может убирать процесс также по фильтру - описания опций этих утилит можно прочитать в консоли tasklist /? и taskkill /? соответственно
Если таких утилит нету то задача немного усложняется - так как придется использовать дополнительную внешную програмку ps для получения списка процессов (Прилагаю ее вложением) Далее вы запускаете ее и получаете вывод с помощью считывания с popen - после этого получаете номер нужного процесса - и делаете запуск posix_kill(полученный_номер_процесса,9)
Скачать файл: ps.exe
Скачан раз: 325


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB