Инструкция: Создание страницы управления скриптами в Cockpit
Цель
Создать пользовательскую страницу в Cockpit, где можно:
- запускать скрипты на сервере (в том числе от root)
- видеть вывод скрипта в реальном времени
- автоматически скроллить вывод вниз
1️⃣ Создаём каталог модуля
В терминале сервера:
sudo mkdir -p /usr/share/cockpit/mybutton
cd /usr/share/cockpit/mybutton
Все файлы для модуля будут храниться здесь.
2️⃣ Создаём manifest.json
Файл описывает модуль и его название в меню Cockpit.
sudo nano manifest.json
Вставляем:
{
"version": 0,
"tools": {
"mybutton": {
"label": "Управление скриптами",
"path": "index.html"
}
}
}
Сохраняем и выходим.
3️⃣ Создаём HTML-страницу
sudo nano index.html
Вставляем следующий код без inline-скриптов и стилей, чтобы не блокировался CSP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../base1/cockpit.js"></script>
<link rel="stylesheet" href="style.css">
<script src="main.js"></script>
</head>
<body>
<h2>Управление скриптами</h2>
<button id="run">Запустить скрипт</button>
<div id="terminal">Готов к запуску</div>
</body>
</html>
4️⃣ Создаём CSS для терминала
sudo nano style.css
Пример стилей:
#terminal {
background: black;
color: #00ff00;
font-family: monospace;
padding: 10px;
height: 300px;
overflow-y: auto;
white-space: pre-wrap;
}
button {
margin-bottom: 10px;
padding: 5px 15px;
}
5️⃣ Создаём JS-файл для кнопки и автоскроллинга
sudo nano main.js
Пример кода:
document.addEventListener("DOMContentLoaded", function () {
const button = document.getElementById("run");
const terminal = document.getElementById("terminal");
button.addEventListener("click", function () {
terminal.textContent = "Запуск скрипта от root...\n";
cockpit.spawn(
["/usr/local/bin/myscript.sh"], // путь к вашему скрипту
{ superuser: "require", err: "out", pty: true } // запуск от root
)
.stream(function(data) {
terminal.textContent += data;
terminal.scrollTop = terminal.scrollHeight; // автоскролл
})
.done(function() {
terminal.textContent += "\n[Скрипт завершён]";
terminal.scrollTop = terminal.scrollHeight;
})
.fail(function(error) {
terminal.textContent += "\n[Ошибка]\n" + error;
terminal.scrollTop = terminal.scrollHeight;
});
});
});
6️⃣ Создаём сам скрипт
Например:
sudo nano /usr/local/bin/myscript.sh
Пример скрипта:
#!/bin/bash
echo "Скрипт запущен!"
sleep 1
echo "Выполняется процесс..."
sleep 1
echo "Завершено"
date
Сделаем скрипт исполняемым:
sudo chmod +x /usr/local/bin/myscript.sh
7️⃣ Перезапускаем Cockpit
sudo systemctl restart cockpit
8️⃣ Используем модуль
- Открой Cockpit в браузере.
- В левом меню появится пункт «Управление скриптами».
- Нажми на него.
- Нажми кнопку «Запустить скрипт».
- Вывод скрипта появится в терминале прямо на странице.
- Автоскролл покажет последние строки в реальном времени.
Советы
- Проверяйте скрипт вручную в терминале перед запуском через Cockpit:
sudo /usr/local/bin/myscript.sh
- Если скрипт требует root — оставляйте
{ superuser: "require" }. Cockpit покажет диалог для подтверждения. - Используйте
pty: trueдля корректного вывода (как в терминале). - Любые изменения JS и CSS требуют Ctrl+Shift+R в браузере для полной перезагрузки.