Скорее всего, у вас возникнут проблемы с разрешениями, поскольку пользователь веб-сервера www-data
не будет иметь разрешения для перезапуска службы.
Так что, если вы не разрешите это, это неидти на работу. Предыдущий код , который работает, заключается в том, что вы входите через SSH с пользователем root.
Хорошо, так что если вы добавили разрешение www-data
для перезапуска службы, ваш код будет похож наследующий.Используя exec()
для выполнения команды.
<code><?php
// define cmds
$commands = [
'stop_apache' => [
'description' => 'Stop Apache2',
'cmd' => 'systemctl stop apache2'
],
'restart_apache' => [
'description' => 'Restart Apache2',
'cmd' => 'systemctl restart apache2'
],
'start_apache' => [
'description' => 'Start Apache2',
'cmd' => 'systemctl start apache2'
],
'status_apache' => [
'description' => 'Status Apache2',
'cmd' => 'systemctl status apache2'
],
];
// handle post
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$error = [];
$result = '';
// validate input
if (empty($_POST['service'])) {
$error = [
'service' => 'Service type required!'
];
} elseif (!array_key_exists($_POST['service'], $commands)) {
$error = [
'service' => 'Invalid Service!'
];
}
if (empty($error)) {
exec($commands[$_POST['service']]['cmd'], $output, $status_code);
if ($status_code === 0) {
$result = 'Service restarted';
} else {
$error = 'Could not restart service! Status code: '.$status_code;
}
}
}
?>
<form action="" method="post">
<?php if (!empty($error)): ?>
<h3>Error</h3>
<pre><?= print_r($error, true) ?>
$ command):?>
<?= print_r($result, true) ?>
Вы заметите, что произойдет сбой с Could not restart service! Status code: 1
- потому что www-data
не будет иметь разрешений.Вы должны прочитать https://serverfault.com/questions/69847/linux-how-to-give-a-user-permission-to-restart-apache о том, как это исправить, также имейте в виду, что это открывает возможность плохого кода, постоянно перезапускающего apache и DOSing.
Лично я бы не стал делать это напрямую, как вы хотитеделать, но вместо этого настроить задачу, которая запускается пользователем root, и вы помещаете операции (перезапуск, остановка и т. д.) в очередь для запуска.
Надеюсь, это поможет.