Я пытаюсь создать сеанс 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)
Взято из: Как сделать системный вызов удаленно?
Пользователь Apache www-data
необходимо предоставить привилегии для выполнения определенных приложений с использованием sudo
,
sudo visudo
, На самом деле мы хотим отредактировать файл в etc/sudoers
Для этого, используя sudo visudo
в терминале дублируется (временная) sudoers
файл для редактирования. 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 скрипт как вам нужно.
Пытаться shell_exec
и проверить возврат.
Вам также может понадобиться доступ sudo:
sudo в php exec ()