Linux ulgamyna hyzmat etmek meselelerini awtomatlaşdyrmak üçin “Shell Scripting” -i ulanmak - 4-nji bölüm


Birnäçe wagt öň täsirli ulgam dolandyryjysynyň/inereneriniň tapawutly aýratynlyklarynyň biri ýaltalykdygyny okapdym. Ilkibaşda birneme gapma-garşylykly ýalydy, ýöne awtor munuň sebäbini düşündirdi:

bir sysadmin wagtynyň köpüsini meseleleri çözmek we gaýtalanýan işleri ýerine ýetirmek bilen geçirýän bolsa, onuň gaty dogry iş etmeýändigine şübhelenip bilersiňiz. Başga sözler bilen aýdylanda, täsirli ulgam dolandyryjysy/inerener, mümkin boldugyça az hereket edip, gaýtalanýan meseleleri ýerine ýetirmek meýilnamasyny düzmeli we ulanyp, problemalary öňünden görmeli,

meselem, 3-nji bölümde gözden geçirilen gurallar - Bu seriýanyň Linux gurallaryny ulanyp, ulgam işjeňliginiň hasabatlaryna gözegçilik ediň. Şeýlelik bilen, kän bir iş etmeýän ýaly bolup görünse-de, bu jogapkärçiligiň köpüsinde gabyk skriptiniň kömegi bilen aladalanýandygy sebäpli, bu gollanmada gürleşmekçi.

Gabyk skripti näme?

Birnäçe söz bilen aýdylanda, gabyk skripti, Linux ýadrosy bilen ahyrky ulanyjynyň arasynda interfeýs gatlagyny üpjün edýän başga bir programma bolan gabyk bilen ädimme-ädim ýerine ýetirilýän programmadan başga zat däl.

Düzgüne görä, RHEL 7-de ulanyjy hasaplary üçin ulanylýan gabyk bash (/ bin/bash). Jikme-jik düşündiriş we käbir taryhy maglumatlary isleseňiz, bu Wikipediýa makalasyna ýüz tutup bilersiňiz.

Bu gabyk bilen üpjün edilen ägirt uly aýratynlyklar barada has giňişleýin maglumat almak üçin, PDF görnüşinde göçürip alnan adam sahypasyny gözden geçirip bilersiňiz (Newbies-den SysAdmin makalasyna linux-console.net-daky makala). Indi başlalyň.

Ulgam maglumatyny görkezmek üçin skript ýazmak

Amatlylygymyz üçin, gabyk skriptlerimizi saklamak üçin bir katalog döredeliň:

# mkdir scripts
# cd scripts

Islän tekst redaktoryňyz bilen system_info.sh atly täze tekst faýly açyň. Theokardaky birnäçe teswir we soňundan käbir buýruklar girizmek bilen başlarys:

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

Ondan soň, ssenariýany ýerine ýetirmek üçin rugsat beriň:

# chmod +x system_info.sh

we işlediň:

./system_info.sh

Has gowy görmek üçin her bölümiň sözbaşylarynyň reňkde görkezilendigine üns beriň:

Bu funksiýa şu buýruk bilen üpjün edilýär:

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

COLOR1 we COLOR2 degişlilikde öňdäki we fon reňkleri bolan ýerlerde (Arch Linux Wiki-den bu ýazgyda has giňişleýin maglumat we opsiýalar düşündirilýär) we reňkde görkezmek isleýän setiriňizdir.

Awtomatiki meseleler

Awtomatlaşdyrmak zerur bolup biljek meseleler, ýagdaýlara görä üýtgäp biler. Şeýlelik bilen, mümkin bolan ähli ssenariýalary bir makalada aýdyp bilmeris, ýöne gabyk skriptini ulanyp awtomatlaşdyryp boljak üç sany klassiki meseläni hödürläris:

1) ýerli faýl maglumatlar binýadyny täzeläň, 2) 777 rugsady bolan faýllary tapyň (we başgaça pozuň) we 3) faýl ulgamynyň ulanylyşy kesgitlenen çäkden geçende duýduryş beriň.

Geliň, aşakdaky mazmunly skriptler katalogymyzda auto_tasks.sh atly bir faýl döredeliň:

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

Scriptazuwyň soňky setirinde iki < belgisiniň arasynda boşlugyň bardygyny ýadyňyzdan çykarmaň.

Kron ulanmak

Netijäni bir ädim öňe sürmek üçin kompýuteriňiziň öňünde oturyp, şol skriptleri el bilen işletmek islemersiňiz. Has dogrusy, wagtal-wagtal işlemek üçin netijeleri kron ulanarsyňyz we netijeleri e-poçta arkaly alyjylaryň öňünden kesgitlenen sanawyna iberersiňiz ýa-da web brauzeri arkaly görüp boljak faýla ýazdyrarsyňyz.

Aşakdaky skript (filesystem_usage.sh) belli df -h buýrugyny işleder, çykyşy HTML tablisasyna formatlar we hasabat.html faýlynda saklar:

#!/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 serwerimizde (192.168.0.18) aşakdaky ýaly görünýär:

Şol hasabata isleýşiňiz ýaly maglumat goşup bilersiňiz. Scriptazuwy her gün agşam sagat 1: 30-da işletmek üçin aşakdaky kontab ýazgysyny goşuň:

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

Gysgaça mazmun

Awtomatlaşdyrmak isleýän ýa-da zerur bolan başga-da birnäçe meseleler hakda pikir edersiňiz; görşüňiz ýaly, gabyk skriptini ulanmak bu tagallany ep-esli aňsatlaşdyrar. Bu makalany peýdaly diýip hasaplasaňyz we aşakdaky forma arkaly öz pikirleriňizi ýa-da teswirleriňizi goşmakdan çekinmäň.