Следующая схема работает как чудо в моем vagrantbox под Debian, но не работает должным образом на производстве под FreeBSD.
1) Я выполняю команду symfony через консоль: php my:command start
, Работает my:daemon
команда изнутри, обернутая в экран следующим образом: cd ~/path && screen -dmS mydaemon php bin/console my:daemon
и это работает хорошо.
2) Когда эта команда запущена, она выполняет еще 3 команды на экране, как screen -dmS myworkerX php bin/console my:worker --id=X
и это тоже хорошо работает.
Для вашего понимания, как это выглядит в дереве процессов:
- screen -dmS mydaemon php bin/console my:daemon
- php bin/console my:daemon
- screen -dmS myworker1 php bin/console my:worker --id=1
- php bin/console my:worker --id=1
- screen -dmS myworker2 php bin/console my:worker --id=2
- php bin/console my:worker --id=2
- screen -dmS myworker3 php bin/console my:worker --id=3
- php bin/console my:worker --id=3
Результат экранной команды показан ниже:
$ screen -list
There are screens on:
16362.mydaemon (Detached)
16372.myworker1 (Detached)
16378.myworker2 (Detached)
16384.myworker3 (Detached)
На данный момент все отлично работает как на FreeBSD, так и на Debian. Проблема в моем сценарии остановки. я бегу php bin/console my:daemon stop
и это вызывает screen -S screenName -X quit
Команда для каждого из всех используемых идентификаторов экрана: mydaemon, myworker1, myworker2, myworker3. Обычно, когда процесс переноса экрана останавливается, он убивает фактический процесс, выполняющийся внутри. Под Debian это правда. А во FreeBSD он останавливает процесс экрана, но оставляя внутренний процесс php нетронутым. Так screen -list
команда показывает пустой список, но ps aux | grep my:worker
говорит, что все процессы продолжают работать в фоновом режиме.
Я хотел бы спросить, кто-нибудь может предположить, где разница между поведением screen
команда на этих операционных системах?
Задача ещё не решена.
Других решений пока нет …