Я создал сайт в 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 и убедиться, что верну мне результат.
Мне нужно запустить мой скрипт каждую ночь около двенадцати часов, чтобы заполнить мою базу данных при появлении новых результатов, но сначала мне нужно сначала запустить ее вручную.
Каков наилучший способ сделать это?
Возможный дубликат [Предотвращение таймаута шлюза nginx 504 с использованием набора PHP \ _time \ _limit()] (http://stackoverflow.com/questions/16002268/prevent-nginx-504-gateway-timeout-using-php-set -time-limit) – KikiTheOne
Я посмотрю на ссылку @KikiTheOne у вас есть хорошая идея, как я могу заставить скрипт работать каждую ночь на arround 12 часов? – user3502250
как @Bruno уже сказал. u можете использовать cronjob для этого. если вы не хотите использовать cronjob, вы можете использовать Ajax-> php, если u настроить таймаут. и при запуске u установите базу данных с флагом, поэтому ни один пользователь не может писать материал или изменять материал до тех пор, пока Ajax-> php не будет rdy. таким образом, вы можете сделать это в первый раз, когда пользователь называет сайт ur после 12 часов. – KikiTheOne