Если бы мне нужно было выполнить crontab вручную или что-то подобное из PHP, я бы, вероятно, использовал очередь. Иметь таблицу базы данных, к которой вы добавляете задания. Другой процесс, либо из cron, либо запущенный как демон, выполняет задания по мере их появления.
Другой способ сделать это - установить отдельный скрипт и выполнить HTTP GET. Это не совсем многопоточность, но это один из способов обработки другой команды в PHP.
Например, если бы я хотел запустить /usr/bin/somescript.sh
по требованию, у меня был бы somescript.php
, который делал системный вызов. Это будет на виртуальном хосте, доступном только с localhost.
Я бы сделал вызов сокета для веб-сервера и получил бы скрипт. Ключ должен не читать на сокете, чтобы он не блокировался. Если бы я хотел проверить возвращаемое значение somescript.php
, я бы сделал это позже в моем основном скрипте, чтобы предотвратить блокировку.
Если выполнение somescript.php
занимает много времени (дольше, чем вызывающий сценарий), вам придется предпринять некоторые действия, чтобы остановить apache от уничтожения сценария, когда сокет закрыт.