У меня есть 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 секунд.