У меня есть сценарий PHP, который выполняет сценарий bash на удаленном сервере, который запускает ряд процессов.
<?php
$connection = ssh2_connect('address1.com', 22);
ssh2_auth_password($connection, 'user', 'pass');
$stream = ssh2_exec($connection, '/root/incoming/process.sh');
?>
Скрипт bash process.sh прекрасно работает, когда выполняется локально на удаленном сервере, без проблем.
#!/bin/bash
wget -O /root/incoming/myfile.mp3 http://address2.com/myfile.mp3;
lame --decode /root/incoming/myfile.mp3 - | /usr/settings/stereo_tool_cmd_64 - - -s /usr/settings/setting.sts | lame -b 128 - /var/www/processed/myfile.mp3
Но когда я пытаюсь выполнить его удаленно, используя скрипт PHP, он взрывается на разных этапах первого процесса (wget). Он даже не завершает загрузку wget, останавливаясь на случайных этапах передачи.
Это проблема с PHP ssh2_exec?
Или я что-то упустил?
Нашел его после большой охоты ..
Мой PHP-скрипт не требует обратной связи со скриптом оболочки, мне просто нужно было его запустить и забыть об этом.
То, что решило мою проблему, было следующим:
$stream = ssh2_exec($connection, "/root/incoming/process.sh &> /dev/null &");
Надеюсь, это поможет кому-то еще.
добавлять set_time_limit ( 0 );
к началу сценария. По умолчанию PHP обычно отключается через 30 секунд.