Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Запуск процесса в бэкграунде через веб страницу (apache+php)  (Прочитано 2670 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн TheDestroyer

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Надо запустить процесс, например ping localhost в бэкграунде, через веб страницу. Делаю так:
$Command = 'ping localhost';
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
В результате выдается PID процесса, но если посмотреть список процессов (ps ax), то этого процесса там нет, а последний PID ровно на 3 больше, чем тот, что выдало $PID. Т.е. процесс запустился и тутже закрылся. Перерыл кучу мануалов, но никак неудается запустить процесс через php, так, чтобы он продолжал работать пока его не убить вручную.
Права на запуск файла есть, если зайти из под юзера, от которого работает веб сервер, то все нормально вручную запускается.
Помогите, плз, правильно запустить процесс в фоновом режиме.

Оффлайн MechanicalBear

  • Любитель
  • *
  • Сообщений: 59
  • Мишка Механический
    • Просмотр профиля
    • mechanicalbear.ru
указывайте полные пути к программам
$ which ping
/bin/ping

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Не знаю, поможет или нет, но вот как я пускаю процессы в бекграунде:

exec('ping localhost 1>/dev/null 2>&1 &');
Суть, направить stdout куда-нибудь, необязательно в /dev/null (1>/to/something или 1>>/to/something), и stderr, обычно перенаправляется в stdout (2>&1). Ну и конечно же бекграунд (амперсанд в конце).

С таким у меня трудностей не было. Помню была трудность пустить через ssh из PHP. Но там проблемка наоборот была. Там подвисал ssh коннект и php скрипт не мог корректно завершиться, вылетал по таймауту. Нашел такое решение, может пригодится:
ssh -T user@host screen -d -m nohup some_command
Потом выяснил что тут что-то лишнее, по-моему ключ -T у ssh. В итоге some_command пускается в скрине, который детачится, а с помощью nohup отвязывается от screen'a и screen завершается. Получаем нужный результат.

Может че пригодится...

 

Страница сгенерирована за 0.042 секунд. Запросов: 23.