Задать вопрос

Как завершить уведомление отправленное в псевдотерминал pty в сессии SSH?

Есть скрипт, который выполняет incron, когда изменяются конфиги nginx
BASH скрипт

#!/bin/bash

log_file="/var/log/nginx/reload.log"
lock_file="/tmp/reload_nginx.lock"
delay=2
timeout_duration=10s # Максимальное время выполнения скрипта

# Цвета для уведомлений
GREEN='\033[0;92m'
RED='\033[0;91m'
WHITE='\033[0;37m'
NC='\033[0m' # No Color

# Получение текущего PID
current_pid=$$

# Запись в лог файл для проверки выполнения скрипта
echo "$(date '+%Y-%m-%d %H:%M:%S') - Script PID: $current_pid - Attempting to execute reload script" >> $log_file

{
    # Блокировка выполнения скрипта
    if ! flock -n 9; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Script PID: $current_pid - Script is already running" >> $log_file
        exit 1
    fi

    # Запись в лог файл для проверки выполнения скрипта
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Script PID: $current_pid - Reload script executed" >> $log_file

    # Ожидание перед перезагрузкой Nginx для объединения событий
    sleep $delay

    # Перезагрузка Nginx с ограничением времени выполнения
    timeout $timeout_duration systemctl restart nginx

    # Проверка статуса Nginx
    nginx_status=$(systemctl is-active nginx)

    # Запись статуса в лог файл
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Script PID: $current_pid - Nginx status: $nginx_status" >> $log_file

    # Формирование сообщения
    if [[ $nginx_status == "active" ]]; then
        message="\n\n${GREEN}⭐⭐⭐${NC} ${WHITE}NGINX${NC} ${GREEN}active ⭐⭐⭐${NC}\n"
    else
        message="\n${RED}⭐⭐⭐${NC} ${WHITE}NGINX${NC} ${RED}$nginx_status ⭐⭐⭐${NC}\n"
    fi

    # Получение терминала root-пользователя
    root_tty=$(who | grep root | awk '{print $2}')

    # Функция для уведомления
    notify() {
        local tty=$1
        echo -e "$message" > /dev/$tty
        echo -en "\007" > /dev/$tty
        for i in {1..5}; do
            echo -en "\033[?5h" > /dev/$tty
            sleep 0.1
            echo -en "\033[?5l" > /dev/$tty
            sleep 0.1
        done
    }

    # Отправка сообщения в терминал root, если он найден
    if [[ -n $root_tty ]]; then
        notify $root_tty
    else
        echo "Root не подключён."
    fi

    # Уведомление в текущем терминале
    notify $(tty)

    # Пауза для завершения уведомлений перед завершением скрипта
    sleep 1

} 9>$lock_file

# Завершение скрипта без необходимости нажатия Ctrl+C
exit 0


Всё работает (не идеально ...), но когда приходит уведомление, то "висит" как-будто не завершённое
Пруф
67c666fb0f5c1478806767.png

Пока не нажмёшь Enter или ^C.

Можно ли сделать, так, чтобы не нажимать? Чтобы после него было опять приглашение для ввода.
  • Вопрос задан
  • 41 просмотр
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы