Notkun Shell Scripting til að gera sjálfvirkan viðhaldsverkefni Linux kerfis - Hluti 4


Fyrir nokkru síðan las ég að eitt af einkennum áhrifaríks kerfisstjóra/verkfræðings er leti. Það virtist svolítið mótsagnakennt í fyrstu en höfundurinn hélt síðan áfram að útskýra hvers vegna:

ef stjórnandi eyðir mestum tíma sínum í að leysa mál og gera endurtekin verkefni, geturðu grunað að hann eða hún sé ekki að gera hlutina alveg rétt. Með öðrum orðum, áhrifaríkur kerfisstjóri/verkfræðingur ætti að þróa áætlun til að framkvæma endurtekin verkefni með eins minni aðgerð af hans/hennar hálfu og mögulegt er, og ætti að sjá fyrir vandamál með því að nota,

til dæmis verkfærin sem farið var yfir í 3. hluta – Fylgstu með kerfisvirkniskýrslum með því að nota Linux verkfærasett úr þessari röð. Þannig að þó að hann eða hún virðist ekki vera að gera mikið, þá er það vegna þess að flestum skyldum hans/hennar hefur verið sinnt með hjálp skeljaforskrifta, sem er það sem við ætlum að tala um í þessari kennslu.

Hvað er skeljahandrit?

Í fáum orðum er skeljaforskrift hvorki meira né minna en forrit sem er keyrt skref fyrir skref af skel, sem er annað forrit sem veitir viðmótslag milli Linux kjarnans og endanotandans.

Sjálfgefið er að skelin sem notuð er fyrir notendareikninga í RHEL 7 er bash (/bin/bash). Ef þú vilt fá nákvæma lýsingu og einhvern sögulegan bakgrunn geturðu vísað í þessa Wikipedia grein.

Til að fá frekari upplýsingar um hina gríðarlegu eiginleika sem þessi skel býður upp á, gætirðu viljað kíkja á mannasíðu hennar, sem er hlaðið niður á PDF formi á (A Guide from Newbies to SysAdmin grein í linux-console.net áður en þú heldur áfram). Nú skulum við byrja.

Að skrifa handrit til að sýna kerfisupplýsingar

Til þæginda skulum við búa til möppu til að geyma skeljaforskriftirnar okkar:

# mkdir scripts
# cd scripts

Og opnaðu nýja textaskrá sem heitir system_info.sh með textaritlinum sem þú vilt. Við byrjum á því að setja inn nokkrar athugasemdir efst og nokkrar skipanir á eftir:

#!/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"

Næst, gefðu framkvæmdarheimildir handritsins:

# chmod +x system_info.sh

og keyra það:

./system_info.sh

Athugaðu að hausar hvers hluta eru sýndir í lit til að sjá betur:

Þessi virkni er veitt af þessari skipun:

echo -e "\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m"

Þar sem COLOR1 og COLOR2 eru forgrunns- og bakgrunnslitir, í sömu röð (nánari upplýsingar og valkostir eru útskýrðir í þessari færslu frá Arch Linux Wiki) og er strengurinn sem þú vilt sýna í lit.

Sjálfvirk verkefni

Verkefnin sem þú gætir þurft að gera sjálfvirkan getur verið mismunandi eftir tilfellum. Þannig getum við ómögulega fjallað um allar mögulegar aðstæður í einni grein, en við munum kynna þrjú klassísk verkefni sem hægt er að gera sjálfvirkt með skeljaforskriftum:

1) uppfæra staðbundinn skráagagnagrunn, 2) finna (og að öðrum kosti eyða) skrám með 777 heimildum og 3) gefa viðvörun þegar notkun skráakerfis fer yfir skilgreind mörk.

Við skulum búa til skrá sem heitir auto_tasks.sh í forskriftaskránni okkar með eftirfarandi innihaldi:

#!/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)

Vinsamlegast athugaðu að það er bil á milli < táknanna tveggja í síðustu línu handritsins.

Að nota Cron

Til að taka skilvirkni einu skrefi lengra, munt þú ekki vilja sitja fyrir framan tölvuna þína og keyra þessi forskrift handvirkt. Frekar, þú munt nota cron til að skipuleggja þessi verkefni til að keyra reglulega og senda niðurstöðurnar á fyrirfram skilgreindan lista yfir viðtakendur með tölvupósti eða vista þær í skrá sem hægt er að skoða með vafra.

Eftirfarandi forskrift (filesystem_usage.sh) mun keyra vel þekkta df -h skipunina, forsníða úttakið í HTML töflu og vista það í report.html skránni:

#!/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

Í RHEL 7 þjóninum okkar (192.168.0.18) lítur þetta svona út:

Þú getur bætt við þá skýrslu eins mikið af upplýsingum og þú vilt. Til að keyra handritið á hverjum degi klukkan 13:30 skaltu bæta við eftirfarandi crontab færslu:

30 13 * * * /root/scripts/filesystem_usage.sh

Samantekt

Þú munt líklega hugsa um nokkur önnur verkefni sem þú vilt eða þarft að gera sjálfvirkan; eins og þú sérð mun notkun skeljaforskrifta einfalda þessa viðleitni til muna. Ekki hika við að láta okkur vita ef þér finnst þessi grein gagnleg og ekki hika við að bæta við eigin hugmyndum þínum eða athugasemdum í gegnum formið hér að neðan.