2012-04-28 3 views
0

У меня есть PHP скрипт, который будет выполняться через хронВыполнить скрипт через хрон висит терминал

*/5 * * * * /var/www/scripts/run.php 

run.php

#!/usr/bin/php 
<?php 
#stop server 
exec("python /home/server.py stop"); 

#execute some php code here 

#start server again 
exec("python server.py start 2>&1 &"); 
?> 

Последняя строка вызывает проблему.

Когда я бегу сценарий PHP прямо из терминала

/var/www/scripts/run.php 

Он запускает сервер, но терминал висит

Когда скрипт запускается через хрон

Я вижу в пс ниже хотя сценарий сделан

root  23510 0.5 1.3 280064 14228 ?  Ss 10:32 0:00 /usr/bin/php /var/www/scripts/run.php 

Есть ли способ сделай это?

Благодаря

+1

Вы не можете назвать питона внутри PHP как это можно? Разве вы не должны выполнять python через exec или систему? – davidethell

+0

и remeber, чтобы указать полный путь – k102

+0

Похоже, вам здесь не нужен php, но скрипт bash будет делать. Кроме того, вы НЕ ДОЛЖНЫ хранить его в 'www'. Переместите его в каталог, который не отображается в Интернете. – Nadh

ответ

1

Если ваш PHP скрипт действительно сценарий оболочки, изменить хижину. Если вы хотите, чтобы вызовы python запускались в фоновом режиме, добавьте «&» в конец строки. Если вы создадите скрипт оболочки, попробуйте выполнить его с помощью sh -x <script>, чтобы увидеть, какая команда зависает.

Если вы хотите сделать его допустимым PHP-скриптом, это будет очень много работы, но если вы используете POSIX, вы можете использовать fork(), что сделает его относительно простым.

+0

Привет. Нет. Мне не нужен сценарий оболочки UNIX, но действительный php. Кроме того, я использую linux. Можете ли вы представить пример с помощью вилки? Спасибо – Thomas

+0

fork пример здесь: http://php.net/manual/en/function.pcntl-fork.php –

1

Измените последнюю строку следующим образом:

exec("nohup python server.py start 2>&1 &"); 

поЬир покажет процесс не остановить, когда контролирующий процесс или пользователь ушел. Это может быть или не быть вашей проблемой, но стоит попробовать.

+0

Спасибо. Пробовал, но результат тот же. – Thomas

+0

Что делать, если вы перенаправляете свой вывод в файл? Попробуйте изменить конец на «>> some_output_file &» – davidethell

+0

Все еще ничего. Это сводит меня с ума – Thomas

0

Наконец код, который делает трюк

exec("nohup python server.py start &> /dev/null &"); 
Смежные вопросы