Для запуска скриптов на сервере в фоновом режиме я обычно использую команду nohup. Я попробовал вызвать её через exec и shell_exec без дополнительных параметров. При запуске команды скрипт зависает до того момента, пока команда не выполнится. Ниже код команды:
exec('nohup rsync -avz -e "ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" user1@3.3.3.3:/original/ /destination/s_24/ && echo $? >> /destination/l_24.txt 2>&1 &');
Так как же мне запустить rsync в фоновом режиме средствами php так, чтобы скрипт не ждал пока выполнится команда?
Важные уточнения/наблюдения
1. PHP-скрипт запускается из браузера, а не из терминала
2. PHP работает через php-fpm, т.е. без Apache
Я заменил фоновую команду на упрощенную для анализа проблемы. Следующие варианты вешают скрипт:
sleep 15 &
nohup sleep 15 &
setsid sleep 15 &
Я предполагаю, это нормальное поведение для nohup. Команда, запущенная через nohup, теоретически может работать без терминала, если из него выйти. Но в вызове ведь нет команды выхода из терминала.
Тем не менее варианты:
nohup sleep 15 && exit &
nohup sleep 15 & exit
тоже не работают как надо.
Я также пробовал заменять exec на shell_exec, но это не дало никакого результата.