Uporaba skript za lupine za avtomatizacijo nalog vzdrževanja sistema Linux - 4. del
Pred časom sem prebral, da je ena od značilnosti učinkovitega sistemskega skrbnika/inženirja lenoba. Sprva se mi je zdelo malo protislovno, a je avtor nato pojasnil, zakaj:
če sysadmin večino svojega časa porabi za reševanje problemov in ponavljanje nalog, lahko sumite, da stvari ne počne povsem pravilno. Z drugimi besedami, učinkoviti sistemski skrbnik/inženir bi moral razviti načrt za izvajanje ponavljajočih se nalog s čim manj ukrepanja s svoje strani in predvideti težave z uporabo,
na primer orodja, pregledana v 3. delu - Spremljanje poročil o sistemskih dejavnostih z uporabo nabora orodij Linux te serije. Čeprav se morda zdi, da ne počne veliko, je to zato, ker je bila za večino njegovih/njegovih odgovornosti poskrbljeno s pomočjo skriptov lupine, o čemer bomo govorili v tej vadnici.
Kaj je lupinski skript?
Z nekaj besedami skript lupine ni nič več in nič manj kot program, ki se po korakih izvaja z lupino, ki je še en program, ki zagotavlja vmesniško plast med jedrom Linuxa in končnim uporabnikom.
Privzeto je lupina, uporabljena za uporabniške račune v RHEL 7, bash (/ bin/bash). Če želite podroben opis in zgodovinsko ozadje, se lahko obrnete na ta članek na Wikipediji.
Če želite izvedeti več o ogromnem naboru funkcij, ki jih ponuja ta lupina, si oglejte njeno stran z navodili, ki je v obliki PDF prenesena na (članek Vodnik od Newbies do SysAdmin na linux-console.net, preden nadaljujete). Zdaj pa začnimo.
Pisanje skripta za prikaz sistemskih informacij
Za naše udobje ustvarimo imenik za shranjevanje naših skriptov lupine:
# mkdir scripts # cd scripts
In odprite novo besedilno datoteko z imenom system_info.sh
z želenim urejevalnikom besedil. Začeli bomo z vstavitvijo nekaj komentarjev na vrhu in nekaj ukazov zatem:
#!/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"
Nato skriptu dajte dovoljenja za izvajanje:
# chmod +x system_info.sh
in ga zaženite:
./system_info.sh
Upoštevajte, da so glave vsakega odseka barvno prikazane za boljšo vizualizacijo:
To funkcionalnost zagotavlja ta ukaz:
echo -e "\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m"
Kjer sta COLOR1 in COLOR2 barvi ospredja oziroma ozadja (več informacij in možnosti je razloženo v tem vnosu iz Arch Linux Wiki),
Avtomatizacija opravil
Naloge, ki jih boste morda morali avtomatizirati, se lahko razlikujejo od primera do primera. Tako v enem članku nikakor ne moremo zajeti vseh možnih scenarijev, vendar bomo predstavili tri klasične naloge, ki jih je mogoče avtomatizirati s pomočjo skript lupine:
1) posodobite lokalno zbirko podatkov datotek, 2) poiščite (in izbrišite) datoteke z 777 dovoljenji in 3) opozorite, če uporaba datotečnega sistema preseže določeno omejitev.
Ustvarimo datoteko z imenom auto_tasks.sh
v našem imeniku skriptov z naslednjo vsebino:
#!/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)
Upoštevajte, da je v zadnji vrstici skripta med obema znakoma <
presledek.
Uporaba Crona
Če želite narediti korak več učinkovitosti, ne boste želeli sedeti pred računalnikom in ročno zagnati teh skriptov. Namesto tega boste s pomočjo crona načrtovali redno izvajanje teh nalog in rezultate poslali vnaprej določenemu seznamu prejemnikov po e-pošti ali jih shranili v datoteko, ki si jo lahko ogledate s spletnim brskalnikom.
Naslednji skript (filesystem_usage.sh) bo zagnal dobro znani ukaz df -h, izhod oblikoval v tabelo HTML in ga shranil v datoteko 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
V našem strežniku RHEL 7 (192.168.0.18) je to videti tako:
Temu poročilu lahko dodate toliko informacij, kot želite. Če želite skript zagnati vsak dan ob 13.30, dodajte naslednji vnos v crontab:
30 13 * * * /root/scripts/filesystem_usage.sh
Povzetek
Najverjetneje si boste omislili še nekaj drugih nalog, ki jih želite ali morate avtomatizirati; kot lahko vidite, bo uporaba skript lupine močno poenostavila ta napor. Prosimo, sporočite nam, če se vam zdi ta članek koristen in ne oklevajte z dodajanjem svojih idej ali komentarjev prek spodnjega obrazca.