Verwendung von Shell-Scripting zur Automatisierung von Linux-Systemwartungsaufgaben - Teil 4
Vor einiger Zeit habe ich gelesen, dass eines der charakteristischen Merkmale eines effektiven Systemadministrators/Ingenieurs Faulheit ist. Es schien zunächst ein wenig widersprüchlich, aber der Autor fuhr dann fort zu erklären, warum:
Wenn ein Systemadministrator die meiste Zeit damit verbringt, Probleme zu lösen und sich wiederholende Aufgaben zu erledigen, können Sie den Verdacht haben, dass er oder sie die Dinge nicht ganz richtig macht. Mit anderen Worten, ein effektiver Systemadministrator/Ingenieur sollte einen Plan entwickeln, um sich wiederholende Aufgaben mit so wenig Aktion wie möglich durchzuführen, und sollte Probleme vorhersehen, indem er
Zum Beispiel die Tools, die in Teil 3 – Überwachen von Systemaktivitätsberichten mit Linux-Toolsets dieser Reihe besprochen werden. Auch wenn er oder sie nicht viel zu tun scheint, liegt das daran, dass die meisten seiner Aufgaben mit Hilfe von Shell-Skripten erledigt wurden, worüber wir in diesem Tutorial sprechen werden.
Was ist ein Shell-Skript?
In wenigen Worten, ein Shell-Skript ist nicht mehr und nicht weniger als ein Programm, das Schritt für Schritt von einer Shell ausgeführt wird, einem weiteren Programm, das eine Schnittstellenschicht zwischen dem Linux-Kernel und dem Endbenutzer bereitstellt.
Standardmäßig wird für Benutzerkonten in RHEL 7 die Shell bash (/bin/bash) verwendet. Wenn Sie eine detaillierte Beschreibung und einen historischen Hintergrund wünschen, können Sie sich auf diesen Wikipedia-Artikel beziehen.
Um mehr über die enorme Anzahl von Funktionen zu erfahren, die diese Shell bietet, sollten Sie sich die Manpage ansehen, die im PDF-Format unter (Bash-Befehle) heruntergeladen werden kann. Abgesehen davon wird davon ausgegangen, dass Sie mit Linux-Befehlen vertraut sind (wenn nicht, empfehle ich Ihnen dringend, den Artikel Ein Leitfaden von Neulingen zum SysAdmin in linux-console.net durchzugehen, bevor Sie fortfahren). Fangen wir jetzt an.
Schreiben eines Skripts zum Anzeigen von Systeminformationen
Der Einfachheit halber erstellen wir ein Verzeichnis, in dem unsere Shell-Skripte gespeichert werden:
mkdir scripts
cd scripts
Öffnen Sie eine neue Textdatei mit dem Namen system_info.sh mit Ihrem bevorzugten Texteditor. Wir beginnen damit, oben ein paar Kommentare und danach einige Befehle einzufügen:
#!/bin/bash
Sample script written for Part 4 of the RHCE series
This script will return the following set of system information:
-Hostname information:
echo -e "\e[31;43m***** HOSTNAME INFORMATION *****\e[0m"
hostnamectl
echo ""
-File system disk space usage:
echo -e "\e[31;43m***** FILE SYSTEM DISK SPACE USAGE *****\e[0m"
df -h
echo ""
-Free and used memory in the system:
echo -e "\e[31;43m ***** FREE AND USED MEMORY *****\e[0m"
free
echo ""
-System uptime and load:
echo -e "\e[31;43m***** SYSTEM UPTIME AND LOAD *****\e[0m"
uptime
echo ""
-Logged-in users:
echo -e "\e[31;43m***** CURRENTLY LOGGED-IN USERS *****\e[0m"
who
echo ""
-Top 5 processes as far as memory usage is concerned
echo -e "\e[31;43m***** TOP 5 MEMORY-CONSUMING PROCESSES *****\e[0m"
ps -eo %mem,%cpu,comm --sort=-%mem | head -n 6
echo ""
echo -e "\e[1;32mDone.\e[0m"
Erteilen Sie als Nächstes dem Skript Ausführungsberechtigungen:
chmod +x system_info.sh
und führen Sie es aus:
./system_info.sh
Beachten Sie, dass die Überschriften der einzelnen Abschnitte zur besseren Visualisierung farbig angezeigt werden:
Diese Funktionalität wird durch den folgenden Befehl bereitgestellt:
echo -e "\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m"
Wobei COLOR1 und COLOR2 die Vorder- bzw. Hintergrundfarben sind (weitere Informationen und Optionen werden in diesem Eintrag aus dem Arch Linux Wiki erklärt) und <IHR TEXT HIER> die Zeichenkette ist, die Sie in Farbe anzeigen möchten.
Automatisieren von Aufgaben
Die Aufgaben, die Sie möglicherweise automatisieren müssen, können von Fall zu Fall variieren. Wir können also unmöglich alle möglichen Szenarien in einem einzigen Artikel abdecken, sondern wir stellen drei klassische Aufgaben vor, die mit Hilfe von Shell-Scripting automatisiert werden können:
1) die lokale Dateidatenbank aktualisieren, 2) Dateien mit 777-Berechtigungen suchen (und alternativ löschen) und 3) eine Warnung ausgeben, wenn die Dateisystemnutzung ein definiertes Limit überschreitet.
Erstellen wir eine Datei mit dem Namen auto_tasks.sh in unserem Skriptverzeichnis mit folgendem Inhalt:
#!/bin/bash
Sample script to automate tasks:
-Update local file database:
echo -e "\e[4;32mUPDATING LOCAL FILE DATABASE\e[0m"
updatedb
if [ $? == 0 ]; then
echo "The local file database was updated correctly."
else
echo "The local file database was not updated correctly."
fi
echo ""
-Find and / or delete files with 777 permissions.
echo -e "\e[4;32mLOOKING FOR FILES WITH 777 PERMISSIONS\e[0m"
Enable either option (comment out the other line), but not both.
Option 1: Delete files without prompting for confirmation. Assumes GNU version of find.
#find -type f -perm 0777 -delete
Option 2: Ask for confirmation before deleting files. More portable across systems.
find -type f -perm 0777 -exec rm -i {} +;
echo ""
-Alert when file system usage surpasses a defined limit
echo -e "\e[4;32mCHECKING FILE SYSTEM USAGE\e[0m"
THRESHOLD=30
while read line; do
# This variable stores the file system path as a string
FILESYSTEM=$(echo $line | awk '{print $1}')
# This variable stores the use percentage (XX%)
PERCENTAGE=$(echo $line | awk '{print $5}')
# Use percentage without the % sign.
USAGE=${PERCENTAGE%?}
if [ $USAGE -gt $THRESHOLD ]; then
echo "The remaining available space in $FILESYSTEM is critically low. Used: $PERCENTAGE"
fi
done < <(df -h --total | grep -vi filesystem)
Bitte beachten Sie, dass zwischen den beiden < Zeichen in der letzten Zeile des Skripts ein Leerzeichen steht.
Verwendung von Cron
Um die Effizienz noch einen Schritt weiter zu steigern, sollten Sie nicht vor Ihrem Computer sitzen und diese Skripte manuell ausführen. Stattdessen verwenden Sie Cron, um diese Aufgaben so zu planen, dass sie regelmäßig ausgeführt werden, und senden die Ergebnisse per E-Mail an eine vordefinierte Liste von Empfängern oder speichern sie in einer Datei, die mit einem Webbrowser angezeigt werden kann.
Das folgende Skript (filesystem_usage.sh) führt den bekannten Befehl df -h aus, formatiert die Ausgabe in eine HTML-Tabelle und speichert sie in der Datei report.html:
#!/bin/bash
Sample script to demonstrate the creation of an HTML report using shell scripting
Web directory
WEB_DIR=/var/www/html
A little CSS and table layout to make the report look a little nicer
echo "<HTML>
<HEAD>
<style>
.titulo{font-size: 1em; color: white; background:#0863CE; padding: 0.1em 0.2em;}
table
{
border-collapse:collapse;
}
table, td, th
{
border:1px solid black;
}
</style>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
</HEAD>
<BODY>" > $WEB_DIR/report.html
View hostname and insert it at the top of the html body
HOST=$(hostname)
echo "Filesystem usage for host <strong>$HOST</strong><br>
Last updated: <strong>$(date)</strong><br><br>
<table border='1'>
<tr><th class='titulo'>Filesystem</td>
<th class='titulo'>Size</td>
<th class='titulo'>Use %</td>
</tr>" >> $WEB_DIR/report.html
Read the output of df -h line by line
while read line; do
echo "<tr><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $1}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $2}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $5}' >> $WEB_DIR/report.html
echo "</td></tr>" >> $WEB_DIR/report.html
done < <(df -h | grep -vi filesystem)
echo "</table></BODY></HTML>" >> $WEB_DIR/report.html
In unserem RHEL 7-Server (192.168.0.18) sieht dies wie folgt aus:
Sie können diesem Bericht so viele Informationen hinzufügen, wie Sie möchten. Um das Skript jeden Tag um 13:30 Uhr auszuführen, fügen Sie den folgenden crontab-Eintrag hinzu:
30 13 * * * /root/scripts/filesystem_usage.sh
Zusammenfassung
Sie werden höchstwahrscheinlich an mehrere andere Aufgaben denken, die Sie automatisieren möchten oder müssen. Wie Sie sehen können, wird die Verwendung von Shell-Scripting diesen Aufwand erheblich vereinfachen. Lassen Sie uns wissen, ob Sie diesen Artikel hilfreich finden, und zögern Sie nicht, Ihre eigenen Ideen oder Kommentare über das untenstehende Formular hinzuzufügen.



