Message of the day - MOTD
Konfiguracja MOTD w FreeBSD z kolorowym ASCII art i monitorowaniem systemu
Aby stworzyć atrakcyjny, kolorowy MOTD (
Message Of The Day)Day na(MOTD)
Co zto nazwąjest serweraMOTD?
Message styluOf retroThe ASCIIDay art(MOTD) orazto tekst wyświetlaniemwietlany bieżącegopo obciążeniazalogowaniu CPU,do pamięcisystemu, RAMzazwyczaj izawiera pojemnościpowitanie dysków,lub możnanajważniejsze przygotowaćinformacje skrypto bash.systemie. TakieW MOTDsystemach Unix/Linux plik /etc/motd jest prostym plikiem tekstowym, który nie interpretuje poleceń, wyświetla jedynie statyczną zawartość.
Dlaczego plik /etc/motd nie może równieżwykonywać zawierać status kluczowych procesów serwera gry.poleceń?
Przykładowy
Plik /etc/motd jest tylko zwykłym plikiem tekstowym i nie jest interpretowany jako skrypt MOTDani wpolecenie. Aby mieć dynamiczne i kolorowe wiadomości, tworzymy osobny skrypt Bash, który jest wywoływany podczas logowania przez plik startowy powłoki.
Skrypt motd – sekcje i wyjaśnienia poleceń
#!/bin/bash (do umieszczenia np. w /etc/motd.sh):
#!/usr/local/bin/bash
Kolory
Wyjaśnienie: Ścieżka do interpretera bash w systemach, gdzie bash jest zainstalowany w /usr/local/bin.
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
CYAN='\033[36m'
RESET='\033[0m'
#
Wyjaśnienie: ASCIIDefiniujemy artzmienne nazwreprezentujące serwerakody (retroANSI styl)do kolorowania tekstu na terminalu.
echo -e "${CYAN} __ __ _____ ____ ____ ______ __"
echo -e "| \\/ |_ _|___ \\/ ___|| _ \\ \\ / /"
echo -e "| |\\/| | | | __) \\___ \\| |_) \\ \\ / / "
echo -e "| | | | | | / __/ ___) | _ < \\ V / "
echo -e "|_| |_| |_| |_____|____/|_| \\_\\ \\_/ ${RESET}"
Wyjaśnienie: PobórWyświetlamy średniegokolorowy obciążenianapis CPUASCII art symbolizujący nazwę serwera w stylu retro. Polecenie echo -e interpretuje kody ucieczki dla kolorów, a instrukcje formatowania nadają kolor i resetują go po wyświetleniu.
LOAD=$(sysctl -n vm.loadavg | awk '{print $2, $3, $4}')
Wyjaśnienie: PamięćPobieramy RAMśrednie całkowitaobciążenie CPU (load average) korzystając z sysctl, a awk wyciąga drugą, trzecią i wolnaczwartą wartość z wyniku (MB)odpowiednio 1-, 5- i 15-minutowy load).
MEM_TOTAL=$(sysctl -n hw.physmem)
MEM_TOTAL_MB=$((MEM_TOTAL / 1024 / 1024))
PAGE_SIZE=$(sysctl -n hw.pagesize)
FREE_PAGES=$(sysctl -n vm.stats.vm.v_free_count)
MEM_FREE_BYTES=$((FREE_PAGES * PAGE_SIZE))
MEM_FREE_MB=$((MEM_FREE_BYTES / 1024 / 1024))
Wyjaśnienie: Pobieramy całkowitą pamięć RAM i wyliczamy jej wartość w megabajtach. Następnie obliczamy ilość wolnej pamięci na podstawie liczby wolnych stron pamięci i rozmiaru strony. Wynik również jest konwertowany na megabajty.
echo -e "${YELLOW}Aktualne obciążenie CPU:${RESET} ${GREEN}${LOAD}${RESET}"
echo -e "${YELLOW}Pamięć całkowita:${RESET} ${GREEN}${MEM_TOTAL_MB} MB${RESET}"
echo -e "${YELLOW}Wolna pamięć:${RESET} ${GREEN}${MEM_FREE_MB} MB${RESET}"
#
Wyjaśnienie: Wyświetlamy pobrane wartości dyskówobciążenia CPU i procent wolnego miejsca (mount point: % wolnego)
echo -e "${YELLOW}Pojemnośpamięci dyskówRAM (punktz montowania:kolorami, %nadając wolnegonagłówkom miejsca):${RESET}"i wartościom różne kolory dla czytelności.
df -h | awk -v CYAN="${CYAN}" -v GREEN="${GREEN}" -v RESET="${RESET}" '
NR>1 {
free_perc = 100 - gensub(/%/, "", "g", $5)
printf "%s%s%s: %s%d%%%s ", CYAN, $6, RESET, GREEN, free_perc, RESET
}
END {print ""}'
#
Wyjaśnienie: statusuPolecenie procesódf -h pokazuje rozmiary systemów gryplików w czytelnej formie. Za pomocą awk zliczamy procent wolnego miejsca (game,100 db,minus auth)procent użycia z kolumny 5) i wyświetlamy punkt montowania (kolumna 6) razem z procentem wolnego miejsca, kolorując je odpowiednio.
count_process() {
ps aux | grep -w "$1" | grep -v grep | wc -l
}
COUNT_GAME=$(count_process "game")
COUNT_DB=$(count_process "db")
COUNT_AUTH=$(count_process "auth")
Wyjaśnienie: Definiujemy funkcję, która liczy liczbę procesów zawierających podany ciąg znaków w pełnej nazwie procesu. Następnie zliczamy liczbę obecnie działających procesów: "game", "db" oraz "auth".
color_status() {
if [ "$1" -gt 0 ]; then
echo -e "${GREEN}RUNNING (${1})${RESET}"
else
echo -e "${RED}NOT RUNNING${RESET}"
fi
}
echo -e "${YELLOW}Status procesów gry MT2SRV:${RESET}"
echo -e "game: $(color_status $COUNT_GAME)"
echo -e "db: $(color_status $COUNT_DB)"
echo -e "auth: $(color_status $COUNT_AUTH)"
#
Wyjaśnienie: Funkcja color_status przyjmuje liczbę procesów i zwraca tekst z informacją, czy procesy są uruchomione (zielony kolor)napis) lub nie (czerwony napis). Następnie wypisujemy status każdej aplikacji gry.
echo -e "${YELLOW}Szczegóły procesów game/db/auth:${RESET}"
ps aux | grep -E 'game|db|auth' | grep -v grep | awk -v GREEN="${GREEN}" -v RESET="${RESET}" '{print GREEN $0 RESET}'
Instrukcje
Wyjaśnienie: użycia:Pokazujemy
- szczegóły
Zapiszdziałającychpowyższyprocesówskrypto nazwach zawierających "game", "db" lub "auth". Wynik jest kolorowany na zielono dla lepszej czytelności wplikuterminalu.Jak używać tego skryptu?
Skrypt zapisujemy jako plik wykonywalny, np.
/etc/motd.sh.i nadajNadajemy muprawauprawnieniawykonywalnewykonania (chmod +x /etc/motd.sh).Wywołujitenwywołujemyskryptgo z pliku startowego powłoki, np.~/lubetc/motd.bash_profileustawglobalnie w/etc/,login.confprofileopcjędodając w nich linię:tm=/etc/motd.sh:sh, aby był uruchamiany przy logowaniu.Pozwoli to na wyświetlanie przy logowaniu kolorowego, retro motdu zawierającego bieżące dane systemowe oraz status procesów gry.
Dzięki temu MOTDpodczas będziekażdego czytelne,logowania estetycznedo powłoki pojawi się dynamiczny i funkcjonalne,kolorowy ułatwiającMessage szybkąOf diagnostykęThe serweraDay przyz każdymnajważniejszymi logowaniu.informacjami o systemie i stanie procesów.