Обновить server/motd-info.sh
This commit is contained in:
+26
-6
@@ -1,7 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Скрипт установки кастомного sysinfo MOTD со статистикой логинов и ключей
|
|
||||||
|
|
||||||
TARGET_PATH="/etc/update-motd.d/zzzzz-motd-sysinfo"
|
TARGET_PATH="/etc/update-motd.d/zzzzz-motd-sysinfo"
|
||||||
|
|
||||||
cat > "$TARGET_PATH" <<"EOF"
|
cat > "$TARGET_PATH" <<"EOF"
|
||||||
@@ -14,9 +12,25 @@ BLUE="\033[1;34m"
|
|||||||
CYAN="\033[0;36m"
|
CYAN="\033[0;36m"
|
||||||
RESET="\033[0m"
|
RESET="\033[0m"
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
# Системная статистика
|
# Системная статистика
|
||||||
MEM_STAT=$(free -m | awk '/^Mem:/{printf "%.1f/%.1f МБ", $3, $2}')
|
# ----------------------------
|
||||||
LOAD_AVG=$(awk '{print $1 " " $2 " " $3 " (1мин 5мин 15мин)"}' /proc/loadavg)
|
|
||||||
|
# Память: занято/всего и %
|
||||||
|
MEM_USED=$(free -m | awk '/^Mem:/{print $3}')
|
||||||
|
MEM_TOTAL=$(free -m | awk '/^Mem:/{print $2}')
|
||||||
|
MEM_PERCENT=$(( MEM_USED * 100 / MEM_TOTAL ))
|
||||||
|
MEM_STAT="${MEM_USED}/${MEM_TOTAL} МБ (${MEM_PERCENT}%)"
|
||||||
|
|
||||||
|
# Нагрузка: считаем как процент относительно количества ядер
|
||||||
|
CPU_CORES=$(nproc)
|
||||||
|
read LOAD1 LOAD5 LOAD15 < /proc/loadavg
|
||||||
|
LOAD1P=$(( $(awk "BEGIN {printf \"%.0f\", $LOAD1/$CPU_CORES*100}") ))
|
||||||
|
LOAD5P=$(( $(awk "BEGIN {printf \"%.0f\", $LOAD5/$CPU_CORES*100}") ))
|
||||||
|
LOAD15P=$(( $(awk "BEGIN {printf \"%.0f\", $LOAD15/$CPU_CORES*100}") ))
|
||||||
|
LOAD_AVG="${LOAD1} ${LOAD5} ${LOAD15} (${LOAD1P}% ${LOAD5P}% ${LOAD15P}% от всех ядер)"
|
||||||
|
|
||||||
|
# CPU температура
|
||||||
if command -v sensors &>/dev/null && sensors | grep -iP "Core|temp1" >/dev/null; then
|
if command -v sensors &>/dev/null && sensors | grep -iP "Core|temp1" >/dev/null; then
|
||||||
CPU_TEMP=$(sensors | grep -iP "Core|temp1" | head -n1 | awk '{print $NF}')
|
CPU_TEMP=$(sensors | grep -iP "Core|temp1" | head -n1 | awk '{print $NF}')
|
||||||
elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then
|
elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then
|
||||||
@@ -25,9 +39,13 @@ elif [[ -r /sys/class/thermal/thermal_zone0/temp ]]; then
|
|||||||
else
|
else
|
||||||
CPU_TEMP="N/A"
|
CPU_TEMP="N/A"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Диск
|
||||||
DISK_STAT=$(df -h / | awk 'NR==2{printf "%s/%s (свободно/всего)", $4, $2}')
|
DISK_STAT=$(df -h / | awk 'NR==2{printf "%s/%s (свободно/всего)", $4, $2}')
|
||||||
|
|
||||||
# Локаль для корректного парсинга дат
|
# ----------------------------
|
||||||
|
# Логины за 24 часа
|
||||||
|
# ----------------------------
|
||||||
DATE_24H_AGO=$(LC_TIME=C date --date="24 hours ago" "+%b %-d")
|
DATE_24H_AGO=$(LC_TIME=C date --date="24 hours ago" "+%b %-d")
|
||||||
CURRENT_DATE=$(LC_TIME=C date "+%b %-d")
|
CURRENT_DATE=$(LC_TIME=C date "+%b %-d")
|
||||||
HOUR_24H_AGO=$(date --date="24 hours ago" "+%H")
|
HOUR_24H_AGO=$(date --date="24 hours ago" "+%H")
|
||||||
@@ -70,6 +88,9 @@ FAILED_IPS=$(echo "$RECENT_LOG" | grep "Failed " | awk '{for(i=1;i<NF;i++) if($i
|
|||||||
# 2. Успешные входы (всего)
|
# 2. Успешные входы (всего)
|
||||||
SUCCESS_IPS=$(echo "$RECENT_LOG" | grep "Accepted " | awk '{for(i=1;i<NF;i++) if($i=="from") print $(i+1)}' | grep -E '^[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head -n 5 | awk '{printf "%s: %s\n", $2, $1}')
|
SUCCESS_IPS=$(echo "$RECENT_LOG" | grep "Accepted " | awk '{for(i=1;i<NF;i++) if($i=="from") print $(i+1)}' | grep -E '^[0-9]+\.[0-9]+' | sort | uniq -c | sort -nr | head -n 5 | awk '{printf "%s: %s\n", $2, $1}')
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Вывод
|
||||||
|
# ----------------------------
|
||||||
echo -e "\n\n${BLUE}============ Состояние сервера ============${RESET}"
|
echo -e "\n\n${BLUE}============ Состояние сервера ============${RESET}"
|
||||||
echo -e "${YELLOW}ОЗУ: ${GREEN}${MEM_STAT}${RESET}"
|
echo -e "${YELLOW}ОЗУ: ${GREEN}${MEM_STAT}${RESET}"
|
||||||
echo -e "${YELLOW}Нагрузка: ${GREEN}${LOAD_AVG}${RESET}"
|
echo -e "${YELLOW}Нагрузка: ${GREEN}${LOAD_AVG}${RESET}"
|
||||||
@@ -93,5 +114,4 @@ echo -e "${BLUE}=============================================${RESET}"
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x "$TARGET_PATH"
|
chmod +x "$TARGET_PATH"
|
||||||
|
|
||||||
bash "$TARGET_PATH"
|
bash "$TARGET_PATH"
|
||||||
Reference in New Issue
Block a user