Linux — команды php exec не будут выполняться

Я пытаюсь создать сеанс tmux и запустить несколько других команд через php.

Когда я запускаю скрипт из сети, он не будет выполнять команды, но когда я запускаю скрипт из терминала с «php test.php», он работает.

Я попытался запустить cmds как sudo и отключить пропуск sudo для www-данных. Но все равно команды не будут выполняться.

Автор сценария:

$array_output = array();
$cmd = "sudo tmux new-session -s Server-17 -d ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'cd /home/Minecraft/Servers/1/17/' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'chmod +x start_script.sh' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'sh start_script.sh' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
var_dump($array_output);

Выход:

array (size=4)
0 => null
1 => string 'failed to connect to server
' (length=28)
2 => string 'failed to connect to server
' (length=28)
3 => string 'failed to connect to server
' (length=28)

0

Решение

Взято из: Как сделать системный вызов удаленно?

Пользователь Apache www-data необходимо предоставить привилегии для выполнения определенных приложений с использованием sudo,

  1. Запустите команду sudo visudo, На самом деле мы хотим отредактировать файл в etc/sudoersДля этого, используя sudo visudo в терминале дублируется (временная) sudoers файл для редактирования.
  2. В конце файла добавьте следующее, например: -если мы хотим использовать команду для перезапуска копчения и команду монтирования для другого действия,

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount

(Это при условии, что вы хотите запустить restart а также mount команды с использованием супер пользователя
(root) привилегии.)

Однако, если вы хотите запустить каждое приложение, используя
привилегии суперпользователя, затем добавьте следующее вместо того, что указано выше. Возможно, вы не захотите этого делать, не для ALL команды, очень опасно.

www-data ALL=NOPASSWD: ALL

3.После редактирования файла sudoers ( visudo мы редактируем временный файл sudoers так что сохраните и выйдите из временного файла (visudo) для записи в sudoers файл.(wq!)

4. Вот и все, теперь используйте exec() следующим образом внутри вашего xxx.phpскрипт.не забывайте использовать sudo перед командой используйте в скрипте php.

например: —

exec ("sudo /etc/init.d/smokeping restart 2>&1");

Итак, в вашей проблеме, добавьте команды, которые вы хотите использовать в step no (2.) как я добавляю и изменяю ваш php скрипт как вам нужно.

0

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

Пытаться shell_exec и проверить возврат.

Вам также может понадобиться доступ sudo:
sudo в php exec ()

0

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