2016-07-12 7 views
0

Я создал сайт в laravel.Длительный удаленный скрипт (PHP на Python)

Где я использую приведенный ниже код, чтобы получить результат из внешнего скрипта python.

$ssh = new \phpseclib\Net\SSH2("11.111.11.11", 22); 
ignore_user_abort(true); 
set_time_limit(0); 
$ssh->setTimeout(0); 
$result = $ssh->exec("python /url_to_remote_python_file $site $keywords ", $output, $ret_code); 

Если я получу массив назад, который занимает около 3 минут, чтобы завершить все, что хорошо.

Я только выяснил, что проблема в том, что php-вызов висит в течение очень долгого времени, когда скрипт python завершил свое отсутствие отправки чего-либо обратно, так что вызов php просто зависает, как это может быть?

Но когда я запрашиваю большой массив из моего скрипта python, я получаю таймаут с кодом ниже.

502 bad gateway nginx 1.8.0 

Я пытался следовать по ссылке Prevent nginx 504 Gateway timeout using PHP set_time_limit(), но я все еще получаю 502 недопустимый шлюз при вызове exsternal питон скрипт, может exsternal сервер быть проблема?

Я бы хотел, чтобы он работал вручную, прежде чем запускать его как работу cron, но это возможно.

Я попытался поместить скрипт в систему очереди laravel. Но там он работает только в том случае, если скрипт работает около 3 минут. Если скрипт работает, скажем, 10 минут, когда слушатель очереди и журнал ничего не возвращают мне.

Как я могу вызвать скрипт python из php и убедиться, что верну мне результат.

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

Каков наилучший способ сделать это?

+1

Возможный дубликат [Предотвращение таймаута шлюза nginx 504 с использованием набора PHP \ _time \ _limit()] (http://stackoverflow.com/questions/16002268/prevent-nginx-504-gateway-timeout-using-php-set -time-limit) – KikiTheOne

+0

Я посмотрю на ссылку @KikiTheOne у вас есть хорошая идея, как я могу заставить скрипт работать каждую ночь на arround 12 часов? – user3502250

+0

как @Bruno уже сказал. u можете использовать cronjob для этого. если вы не хотите использовать cronjob, вы можете использовать Ajax-> php, если u настроить таймаут. и при запуске u установите базу данных с флагом, поэтому ни один пользователь не может писать материал или изменять материал до тех пор, пока Ajax-> php не будет rdy. таким образом, вы можете сделать это в первый раз, когда пользователь называет сайт ur после 12 часов. – KikiTheOne

ответ

0

Ваша проблема с вашим веб-сервером. Если ваш сценарий должен работать как задание cron, вам не нужен веб-сервер, поэтому просто напишите его как сценарий командной строки (используя php-cli).

+0

В конце я хотел бы запустить его как задание cron, но прямо сейчас я хочу запустить его вручную, чтобы я мог гарантировать, что он работает так, как ожидалось. Это возможно? – user3502250

+0

Если вы не можете запустить его «вручную» (из командной строки), вы не сможете запустить его как работу cron, очевидно ... –

+0

http://php.net/manual/en/features.commandline.usage .php –

 Смежные вопросы

  • Нет связанных вопросов^_^