Есть скрипт, который выполняет 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
Всё работает (не идеально ...), но когда приходит уведомление, то "висит" как-будто не завершённое
Пруф
Пока не нажмёшь Enter или ^C.
Можно ли сделать, так, чтобы не нажимать? Чтобы после него было опять приглашение для ввода.