PHP CLI. Как запустить скрипт из терминала по SSH, закрыть терминал, а потом снова открыть и увидеть ход выполнения?
Здравствуйте!
У меня есть удаленный сервер на debian, к которому я подключаюсь через SSH и запускаю на выполнение из консоли один php скрипт, который может выполняться несколько часов. Скрипт через echo выводит информацию о ходе выполнения и обработке некоторых данных. Можно ли как-то запустить скрипт, закрыть терминал, а потом, через некоторое время открыть терминал снова и посмотреть ход выполнения (видеть то, что выводит скрипт в настоящий момент)?
Запуск скрипта я осуществляю следующим образом php script.php
Я конечно могу писать логи в файл или делать вывод в файл php script.php > script.txt
но в таком случае, как я понимаю, файл будет занят приложением пока не запишется до конца. А если не будет, то я не смогу видеть его изменения в реальном времени (думаю, что можно. Но как - не знаю)
screen и tmux. Вот вам уже готовый рецепт.
Как работает (примерно):
$ ssh localhost
$ screen
запускается процесс screen, в нём bash или что-нибудь ещё.
Запускаете вашу команду:
$(screen) php script.php
нажимаете Ctrl+A, Ctrl+D. Попадаете обратно в первый шелл.
отключаемся
$ exit
пьём кофе.
подключаемся вновь:
$ ssh localhost
$ screen -r
Видим результат работы нашей команды и приглашение ввести новую.
$(screen)
А в контексте моего вопроса? screen я запускаю у себя на рабочей машине или удаленной? Если на удаленной, то его я запускаю "до" или "после" запуска скрипта? Он действует для одной задачи или для всех?
И если я отключаюсь от терминала, а потом подключаюсь и ввожу man screen, то увижу ход выполнения?
Как вариант, запускать скрипт через nohup, тогда он не будет привязан к терминалу. nohup php script.php > file.log &
Мониторить в реальном времени добавление строк в файл можно черезtail -f file.log