Skip to main content

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)

FreeBSD

Co zto nazwąjest serweraMOTD?

w

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

ANSI

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'
#
Kolorowy

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}"
#
Pojemnoś

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 ""}'
#
Sprawdzenie

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)"
#
Szczegóły

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ących powyższyprocesów skrypto nazwach zawierających "game", "db" lub "auth". Wynik jest kolorowany na zielono dla lepszej czytelności w plikuterminalu.

    Jak używać tego skryptu?

    Skrypt zapisujemy jako plik wykonywalny, np. /etc/motd.sh. i nadajNadajemy mu prawauprawnienia wykonywalnewykonania (chmod +x /etc/motd.sh).

  • Wywołuji tenwywołujemy skryptgo z pliku startowego powłoki, np. ~/etc/motd.bash_profile lub ustawglobalnie w /etc/login.confprofile, opcję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.