linux — запуск экрана в скрипте завершается неудачно, когда скрипт запускается с переполнением стека

Я использую php для выполнения скрипта на моем сервере.
PHP: exec("screen -dmS testingscreen /home/username/otherfolder/test.sh")
Какое-то время я не мог этого сделать, пока я не покопался и не нашел несколько вещей о том, как это сделать. Я также нашел некоторые вещи о других вещах, связанных с экранами / незначительными проблемами, которые у меня были в то же время.

Я покажу каждую проблему, которая была у меня в деталях, до последней, которую, похоже, я не могу исправить.


Проблема первая (решена): Попытка запустить скрипт вне webroot.
Тема: Извините сценарий вне рута с помощью PHP.
Решение: Используется sudo chown www-data:www-data filename.sh предоставив моему веб-пользователю доступ к сценарию.


Проблема вторая (решена): скрипт ничего не делает, когда php-файл вызывает его.
Решение: сделать скрипт исполняемым с chmod +x filename.sh
Примечания: было до боли очевидно, что я сделал неправильно, когда использовал ls в моем сценарии реж.


Проблема третья (решено): Невозможно выполнить su для www-data, чтобы проверить, работают ли экраны.
Ошибка: эта учетная запись в настоящее время недоступна.
Проблема: www-data был установлен на /bin/nologin в /etc/passwd
Решение: chsh -s /bin/bash www-data чтобы сделать так, чтобы я мог переключиться на него как пользователь.


Вопрос четвертый (решен): в то время как в su www-data не мог использовать screen -r testingscreen
Ошибка: не удается открыть ваш терминал ‘/ dev / pts / 0’ — проверьте.
Проблема: разрешения, не открывающий экран под учетной записью и пытающийся использовать учетную запись su.
Решение: Использование script /dev/null в терминале, прежде чем пытаться screen -r testingscreen,


Проблема пятая (не решена):
Во время выполнения screen -dmS testingscreen /home/username/anotherfolder/filename.sh
С php exec() делает экран testingscreen

У меня есть строка в файле сценария, которая говорит
screen -dmS scriptscreen mono '/home/username/otherfolder/myprogram.exe' 'programargs1' 'programargs2' 'args3' 'args4'
Этот экран не запускается при выполнении сценария «filename.sh»
Однако выполнение этой же строки как пользователя www-data (Использование sudo su www-data быть тем пользователем.) отлично работает.

Также примечание: Бег screen -dmS testingscreen /home/username/otherfolder/test.sh работает абсолютно нормально и запускается как следует scriptscreen, Это работает при использовании sudo su www-data но не, если я запускаю скрипт с php.

На более странной стороне этого, используя screen -dmS testingtop top работает нормально, когда внутри файла скрипта, который запускается php. Я что-то упускаю здесь очевидное?

Я проверил права доступа к файлам, и все в порядке, оно должно работать. Возможность запускать мою программу как www-data означает, что перманент настроен нормально. Просто кажется, что это как-то связано с php или моим сервером в целом. Любая помощь или возможные советы приветствуются, и я надеюсь, что мое подробное описание проблемы и решения может помочь другим в будущем в одном посте.

0

Решение

Поскольку вы вызываете sudo как часть вашего вопроса, я предполагаю, что это попытка заставить PHP выполнить скрипт с правами root?

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash. Получи это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

//if I misunderstood your question and the script does not require
//root permissions you can change the
//second argument on getShell() to false. That will return a bash shell
//with permissions from www-data.

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/home/username/otherfolder/test.sh');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]