MSWT — Telegram-бот для управления вашими сервисами.
⚠️ | Установите pyenv, перед использованием MSWT.
Эта версия переписана с использованием:
uv, aiogram и .env для удобства конфигурации.
3.10.16
pip install uvuv venvsource .venv/bin/activateПеред запуском заполните файл .env
Пример настроек можно найти в .env-example.
uv run -m src.bot/startили/help— показать краткое меню./info— сводка по CPU/RAM/ROM/OS и версии бота./sh <команда или путь>— выполнить команду; если указан путь к файлу, бот отправит файл. Работает и как reply на сообщение с командой. Таймаут выполнения — 60 секунд./bots— запустить все скрипты из./sh-module, имя которых оканчивается на-start.sh(автостарт)./startsh <file.sh>— запустить скрипт из./sh-moduleс логированием в./sh-module/logs/*.log. Без аргумента покажет список.sh./stopsh <file.sh>— остановить процесс скрипта и отключить его авто-рестарт./logs <file.sh>— получить лог выбранного скрипта или список доступных логов/скриптов./restart— выполнитьrestart-daemon.sh(перезапуск systemd-юнитов)./stop— перезагрузить сервер черезsudo reboot(осторожно!).
В боте есть механизм для запуска тасков — фоновых задач, которые выполняет бот. Например, можно делать регулярные бэкапы базы данных и отправлять их вам в Телеграм.
-
Создайте файл с задачей в папке
src/bot/handlers/tasks. Например:BackupBD.py. -
В этом файле создайте асинхронную функцию с именем
start_task, которая принимает один аргумент — объект ботаbotтипаBotиз aiogram.
from aiogram import Bot
import asyncio
async def start_task(bot: Bot) -> None:
while True:
try:
# Здесь логика вашей задачи, например бэкап базы
await run_mongodump(...)
except Exception as e:
# Обработка ошибок
print(f"Ошибка в задаче: {e}")
await asyncio.sleep(10000) # пауза перед следующим запуском- При старте бота автоматически найдутся все такие задачи и будут запущены параллельно.
После первого запуска бота в корне проекта автоматически создаётся папка sh-module.
В эту папку нужно помещать ваши .sh-скрипты (юниты).
Важно:
Имя файла должно заканчиваться на -start.sh, например: МоёНазвание-start.sh.
Если в названии отсутствует суффикс -start.sh, бот не сможет обнаружить и запустить ваш юнит.
Запуски через /startsh автоматически логируются в ./sh-module/logs и отслеживаются вотчдогом: при падении скрипт будет перезапущен (ограниченное число попыток). Остановить процесс и снять его с авто-рестарта можно через /stopsh.
#!/bin/bash
echo 'Привет, мир!'#!/bin/bash
cd /home/miku/dev/MSWT
source .venv/bin/activate
uv run bot.pyДля того, чтобы бот запускался автоматически при старте системы, создайте systemd unit-файл.
[Service]
ExecStart=/ПУТЬ_К_MSWT/start-server.sh
RestartSec=10
Restart=always
Type=simple
[Install]
WantedBy=default.target- Дайте права на выполнение скриптам:
chmod +x /ПУТЬ_К_MSWT/restart-daemon.sh
chmod +x /ПУТЬ_К_MSWT/start-server.sh- Скопируйте unit-файл в systemd:
sudo cp mswt.service /home/user/.config/systemd/user/- Перезагрузите конфигурацию systemd:
sudo systemctl --user daemon-reload- Включите и сразу запустите сервис:
sudo systemctl --user enable mswt.service --now- Формат:
/sh <команда>или реплай на сообщение с командой. - Если нужен вывод sudo, передавайте пароль через stdin:
echo "my_password" | sudo -S pacman -Syu- Если команда пишет слишком много, бот отправит вывод отдельным файлом.