За последние 24 часа нас посетил 212931 программист и 4425 роботов. Сейчас ищет 1481 программист ...

exec() в цикле

Тема в разделе "PHP для новичков", создана пользователем Black_Core, 15 июл 2017.

Метки:
  1. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    Привет мужики (и дамы, если имеются) ...
    Надеюсь поможете прояснить ситуацию ..
    цель - одновременный запуск одного и того же внешнего приложения в системе (Linux) с разными параметрами - в фоне ..
    попытался реализовать это в цикле (данные для этого приложения берутся из БД)
    но ps aux говорит что ничего не запущено .. (запускается и затухает, а процесс многочасовой)
    делал так -
    Код (Text):
    1.  exec('python blabla --param_1 --param_2 > /dev/null 2>&1 &');
    если же введу эту задачу напрямую в консоль с разными параметрами - то все работает нормально и процессы висят и выполняются..
    что я упустил из виду ?
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.724
    Симпатии:
    358
    а в php.ini она не заблокирована?
     
  3. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    нет .. она отрабатывает но только 1 раз почему то .. или же отрабатывает по всем процессам но они почти сразу прекращают своё выполнение - это в зависимости от того стоит > /dev/null 2>&1 или > /dev/null ..
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.724
    Симпатии:
    358
    и путь к сприпту может полный указать надо?
     
  5. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    я полный указываю.. говорю же начинает отрабатывать и прекращает .. просто видимо какие то тонкости есть с > /dev/null 2>&1
     
  6. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.724
    Симпатии:
    358
    да.. я как то это не дочитал..
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    может прав нет на доступ к тем файлам, которые нужны тому приложению.
     
  8. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    но она ведь запускает один процесс иногда первый иногда второй (когда их всего два) .. в зависимости от того с какими параметрами запускается команда (я про вывод в null и & как для команды так и для скрипта запуска этих команд) более подробно распишу чуть позже ..
    --- Добавлено ---
    Код (Text):
    1. exec('python blabla --param_1 --param_2 > /dev/null 2>&1 &');
    если пишу так то скрипт запускает обе имеющиеся задачи но они сразу прекращают свою работу .. это я выяснил путем многократных "ps aux"
    --- Добавлено ---
    наверное правильнее было бы спросить - как мне вообще сделать это ? запустить множество процессов в фоне одновременно .. без ожидания завершения каждого из них ..
     
  9. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    тут увидел совет использовать PCNTL думаю попробовать ..
     
  10. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    выяснилось что PCNTL для меня не вариант .. с такими долгими процесса остаётся только exec, как я понимаю .. но почему умирают процессы я так и не пойму .. причем если убрать & с конца команды и вывод в null - то процесс запускается как положенно, но синхронно .. что меня не устраивает ..
     
  11. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    кажется все прояснилось .. видимо это тупо ограничение на запуск фоновых задач у хостера (beget.com) .. но через ssh задачи все таки запускались исправно ..
    --- Добавлено ---
    не пойму логики но все же ..
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Попробуй направить вывод не в /dev/null а в текстовые файлы, в директорию, разрешенную для записи. При чем 1 и 2 поток в разные файлы.
     
  13. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    попробую .. но они как я понял фоновые задачи блокируют .. возможно придется подыскать новый хостинг даже VPS (как сильно бы мне не нравился beget )) )
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Это какая то дичь
     
  15. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    не столько из-за этой проблемы сколько из-за некоторых других ограничений с которыми меня ознакомила тех.поддержка
    --- Добавлено ---
    не помогло ..
    --- Добавлено ---
    Думаю причина ясна .. тему можно закрыть , участников поблагодарить .. Спасибо всем ..
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Так а что в файлы в итоге записалось?
     
  17. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    ничего .. файлы есть, но пустые
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Система не пишет ошибок. Я бы на твоем месте еще попробовал запустить сам php скрипт через консоль, а не с помощью браузера.
     
  19. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    я так и сделал .. запустил через ssh
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Окей, еще один способ отладки - это третий аргумент функции exec, посмотри его с помощью var_dump()
     
  21. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    а его у меня нет ... тем более скрипт консольный .. так то уже ясно.. я поговорил с тех поддержкой .. они говорят что фоновые задачи блокируются .. смысла копать нет
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    через ssh ты их от какого пользователя запускаешь?
    а через php от какого?
    у пользователя php есть права на те файлы, которые нужны тому приложению? =)
    --- Добавлено ---
    впс стоит дёшево, как обычный хостинг, так что вперёд, будь властелином свего сервера
     
  23. Black_Core

    Black_Core Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    17
    Симпатии:
    0
    дело в том что процесс в фоне висит пока терминал открыт .. как завершится сеанс так и заблокируются фоновые задачи .. уже взялся - работаю над VPS
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    настройка впс для маленького проекта - довольно простая задача. Если что - в разделе по настройке сервера можешь создать темку.
     
    Black_Core нравится это.