Я хочу выполнить команду linux с помощью PHP
myfile.php:
<?php $output = shell_exec('ls'); echo "<pre>$output</pre>"; ?>
Оно работает!
Но когда я меняю команду linux из ls
на reboot
, ничего не происходит!
Поэтому я попытался найти другое решение:
mycode.html:
<button type="button" onclick="/var/www/myscript.sh">Click Me!</button>
myscript.sh:
sudo reboot
Это тоже не работает!
Пусть кто-нибудь поможет мне решить эту проблему.
Спасибо за вашу помощь.
По умолчанию команда reboot должна выполняться как root. Вы могли бы это сделать, если ваш веб-сервер работал под учетной записью root, но это очень необычное предложение.
Как правило, веб-сервер работает под ограниченной учетной записью, которая не может многое сделать и, конечно же, не может выполнить перезагрузку. Если вы действительно хотите это сделать, это должно быть сделано с большой осторожностью. Стандартный способ обеспечить это – создать специальную оболочку (скорее всего, suid), которая проверяет многие условия, прежде чем разрешить работать под повышенными разрешениями.
Другое решение состоит в том, чтобы создать файл флага PHP или вставить специальную запись в базу данных, которая будет проверяться другой службой, запущенной от имени пользователя root, заметив этот флаг и, наконец, выполнив перезагрузку.
Поскольку @mvp говорит, что вы не можете выполнить перезагрузку как пользователь без root.
Простой способ сделать это – с заданием cron.
Ваш myscript.sh будет:
#!/bin/bash touch /tmp/reboot.now
Затем создайте задание cron, которое проверяет, существует ли этот файл:
#!/bin/bash if [ -f /tmp/reboot.now ]; then rm -f /tmp/reboot.now /sbin/shutdown -r now fi
Затем настройте сервер для выполнения этого скрипта каждую минуту
* * * * * /usr/local/sbin/reboot.sh
И не забудьте предоставить права на выполнение в файл, конечно.
Надеюсь, поможет
EDITED: Конечно, ваш myscript.sh
может быть php с fopen
и fclose
вместо этого
В дополнение к ответу Sal00m
ROOT crontab
* * * * * /usr/local/sbin/checkreboot.sh
checkreboot.sh
#!/bin/bash if [ -f /var/www/html/reboot.server ]; then rm -f /var/www/html/reboot.server /sbin/shutdown -r now fi
reboot.php
<?php $filehandler = fopen("/var/www/html/reboot.server",'w'); fwrite($filehandler,"Reboot now\n"); fclose($filehandler); ?>