127 lines
4.8 KiB
Bash
Executable File
127 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Установочный скрипт для Linux Gaming News Bot
|
||
# Создает systemd service и настраивает его для автозапуска
|
||
|
||
set -e # Выход при любой ошибке
|
||
|
||
# Цвета для вывода
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Функции для цветного вывода
|
||
print_info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
print_success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# Проверка запуска от root
|
||
if [ "$EUID" -ne 0 ]; then
|
||
print_error "Скрипт должен быть запущен с правами root (sudo)"
|
||
print_info "Используйте: sudo ./install-service.sh"
|
||
exit 1
|
||
fi
|
||
|
||
# Определение текущего пользователя (не root)
|
||
REAL_USER=$(who am i | awk '{print $1}')
|
||
if [ -z "$REAL_USER" ]; then
|
||
REAL_USER=$(logname 2>/dev/null || echo $SUDO_USER)
|
||
fi
|
||
|
||
if [ -z "$REAL_USER" ]; then
|
||
print_error "Не удалось определить имя пользователя"
|
||
exit 1
|
||
fi
|
||
|
||
print_info "Установка сервиса для пользователя: $REAL_USER"
|
||
|
||
# Определение директории проекта
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_DIR="$SCRIPT_DIR"
|
||
|
||
print_info "Директория проекта: $PROJECT_DIR"
|
||
|
||
# Проверка существования файлов
|
||
if [ ! -f "$PROJECT_DIR/news-bot-modular.py" ]; then
|
||
print_error "Не найден файл news-bot-modular.py в $PROJECT_DIR"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f "$PROJECT_DIR/bot-news-linux-gaming.service" ]; then
|
||
print_error "Не найден файл bot-news-linux-gaming.service в $PROJECT_DIR"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверка наличия keys.py
|
||
if [ ! -f "$PROJECT_DIR/keys.py" ]; then
|
||
print_warning "Не найден файл keys.py с настройками"
|
||
print_info "Создайте keys.py на основе keys_example.py перед запуском сервиса:"
|
||
print_info " cp keys_example.py keys.py"
|
||
print_info " nano keys.py # заполните реальными ключами"
|
||
fi
|
||
|
||
# Создание временного файла сервиса с правильными путями
|
||
TEMP_SERVICE=$(mktemp)
|
||
sed "s|/home/xpamych/Yandex.Disk/IdeaProjects/bot-news-linux-gaming|$PROJECT_DIR|g" "$PROJECT_DIR/bot-news-linux-gaming.service" > "$TEMP_SERVICE"
|
||
sed -i "s|User=xpamych|User=$REAL_USER|g" "$TEMP_SERVICE"
|
||
sed -i "s|Group=xpamych|Group=$REAL_USER|g" "$TEMP_SERVICE"
|
||
|
||
print_info "Копирование systemd unit файла..."
|
||
cp "$TEMP_SERVICE" /etc/systemd/system/bot-news-linux-gaming.service
|
||
rm "$TEMP_SERVICE"
|
||
|
||
print_info "Установка прав доступа..."
|
||
chmod 644 /etc/systemd/system/bot-news-linux-gaming.service
|
||
chown root:root /etc/systemd/system/bot-news-linux-gaming.service
|
||
|
||
print_info "Перезагрузка systemd..."
|
||
systemctl daemon-reload
|
||
|
||
print_success "Сервис успешно установлен!"
|
||
print_info ""
|
||
print_info "Для управления сервисом используйте команды:"
|
||
print_info " sudo systemctl enable bot-news-linux-gaming # Включить автозапуск"
|
||
print_info " sudo systemctl start bot-news-linux-gaming # Запустить сервис"
|
||
print_info " sudo systemctl status bot-news-linux-gaming # Посмотреть статус"
|
||
print_info " sudo systemctl stop bot-news-linux-gaming # Остановить сервис"
|
||
print_info " sudo systemctl disable bot-news-linux-gaming # Отключить автозапуск"
|
||
print_info ""
|
||
print_info "Логи сервиса:"
|
||
print_info " sudo journalctl -u bot-news-linux-gaming -f # Следить за логами"
|
||
print_info " sudo journalctl -u bot-news-linux-gaming -n 50 # Последние 50 строк"
|
||
print_info ""
|
||
|
||
# Предложение сразу включить и запустить
|
||
read -p "Включить автозапуск и запустить сервис сейчас? (y/N): " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||
print_info "Включение автозапуска..."
|
||
systemctl enable bot-news-linux-gaming
|
||
|
||
print_info "Запуск сервиса..."
|
||
systemctl start bot-news-linux-gaming
|
||
|
||
sleep 2
|
||
|
||
print_info "Статус сервиса:"
|
||
systemctl status bot-news-linux-gaming --no-pager
|
||
|
||
print_success "Сервис запущен и добавлен в автозагрузку!"
|
||
else
|
||
print_info "Сервис установлен, но не запущен. Запустите его командой:"
|
||
print_info " sudo systemctl enable --now bot-news-linux-gaming"
|
||
fi |