Paggamit sa Shell Scripting aron I-automate ang Linux System Maintenance Tasks - Bahin 4


Kaniadto nabasa nako nga usa sa mga nagpalahi nga mga kinaiya sa usa ka epektibo nga tagdumala/engineer sa sistema mao ang pagkatapulan. Kini ingon og gamay nga nagkasumpaki sa sinugdanan apan ang tagsulat mipadayon sa pagpasabut ngano:

kung ang usa ka sysadmin mogugol sa kadaghanan sa iyang oras sa pagsulbad sa mga isyu ug paghimo og balik-balik nga mga buluhaton, mahimo ka magduda nga wala niya gibuhat ang mga butang nga husto. Sa laing pagkasulti, ang usa ka epektibo nga tagdumala sa sistema/inhenyero kinahanglan nga maghimo usa ka plano aron mahimo ang nagbalikbalik nga mga buluhaton nga adunay gamay nga aksyon sa iyang bahin kutob sa mahimo, ug kinahanglan nga makit-an ang mga problema pinaagi sa paggamit,

pananglitan, ang mga himan nga girepaso sa Bahin 3 – Monitor System Activity Reports Gamit ang Linux Toolsets niini nga serye. Mao nga, bisan kung wala siya mahimo’g daghan, kini tungod kay ang kadaghanan sa iyang mga responsibilidad naatiman sa tabang sa shell scripting, nga mao ang among hisgutan sa kini nga panudlo.

Unsa ang script sa shell?

Sa pipila ka mga pulong, ang usa ka script sa shell wala’y lain ug wala’y gamay kaysa usa ka programa nga gipatuman sa lakang sa usa ka kabhang, nga usa pa nga programa nga naghatag usa ka layer sa interface tali sa Linux kernel ug sa katapusan nga tiggamit.

Sa kasagaran, ang kabhang nga gigamit alang sa mga account sa gumagamit sa RHEL 7 mao ang bash (/bin/bash). Kung gusto nimo ang usa ka detalyado nga paghulagway ug pipila ka background sa kasaysayan, mahimo nimong tan-awon kini nga artikulo sa Wikipedia.

Aron mahibal-an ang dugang bahin sa daghang mga bahin nga gihatag sa kini nga kabhang, mahimo nimong susihon ang panid sa tawo, nga gi-download sa format nga PDF sa (Usa ka Giya gikan sa Newbies hangtod sa artikulo sa SysAdmin sa linux-console.net sa wala pa magpadayon). Karon magsugod kita.

Pagsulat og script aron ipakita ang impormasyon sa sistema

Para sa atong kasayon, maghimo kita ug direktoryo aron tipigan ang atong mga script sa shell:

# mkdir scripts
# cd scripts

Ug ablihi ang bag-ong text file nga ginganlag system_info.sh gamit ang imong gusto nga text editor. Magsugod kita pinaagi sa pagsal-ot sa pipila ka mga komento sa ibabaw ug pipila ka mga sugo pagkahuman:

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

Sunod, hatagi ang script execute permiso:

# chmod +x system_info.sh

ug dagan kini:

./system_info.sh

Timan-i nga ang mga ulohan sa matag seksyon gipakita sa kolor alang sa mas maayo nga pagtan-aw:

Kana nga pag-andar gihatag sa kini nga mando:

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

Kung diin ang COLOR1 ug COLOR2 mao ang foreground ug background nga mga kolor, matag usa (dugang nga impormasyon ug mga kapilian ang gipatin-aw niini nga entry gikan sa Arch Linux Wiki) ug mao ang string nga gusto nimong ipakita sa kolor.

Pag-automate sa mga Buluhaton

Ang mga buluhaton nga kinahanglan nimo nga awtomatiko mahimong magkalainlain sa matag kaso. Busa, dili namo mahimo nga matabonan ang tanan nga posible nga mga sitwasyon sa usa ka artikulo, apan among ipresentar ang tulo ka klasiko nga mga buluhaton nga mahimong awtomatiko gamit ang shell scripting:

1) pag-update sa lokal nga database sa file, 2) pagpangita (ug alternatibong pagtangtang) sa mga file nga adunay 777 nga permiso, ug 3) alerto kung ang paggamit sa filesystem milabaw sa gitakda nga limitasyon.

Magbuhat ta og file nga ginganlag auto_tasks.sh sa among direktoryo sa mga script nga adunay mosunod nga sulud:

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

Palihug timan-i nga adunay usa ka luna tali sa duha ka < mga timaan sa kataposang linya sa script.

Paggamit sa Cron

Aron mahimo ang kahusayan sa usa ka lakang sa unahan, dili nimo gusto nga molingkod sa atubangan sa imong computer ug mano-mano ang pagpadagan sa mga script. Hinunoa, imong gamiton ang cron sa pag-iskedyul sa mga buluhaton nga modagan matag karon ug unya ug ipadala ang mga resulta ngadto sa gitakda nang daan nga listahan sa mga nakadawat pinaagi sa email o i-save kini sa usa ka file nga mahimong tan-awon gamit ang web browser.

Ang mosunod nga script (filesystem_usage.sh) magpadagan sa iladong df -h command, i-format ang output ngadto sa HTML table ug i-save kini sa report.html file:

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

Sa among RHEL 7 server (192.168.0.18), kini tan-awon sama sa mosunod:

Mahimo nimong idugang sa kana nga taho ang daghang kasayuran nga gusto nimo. Sa pagpadagan sa script kada adlaw sa 1:30 pm, idugang ang mosunod nga crontab entry:

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

Summary

Mahimong maghunahuna ka sa daghang uban pang mga buluhaton nga gusto nimo o kinahanglan nga i-automate; sama sa imong makita, ang paggamit sa shell scripting makapasayon pag-ayo niini nga paningkamot. Ayaw pagduhaduha sa pagpahibalo kanamo kung nakita nimo nga kini nga artikulo makatabang ug ayaw pagpanuko sa pagdugang sa imong kaugalingon nga mga ideya o komento pinaagi sa porma sa ubos.