L-użu ta' Shell Scripting biex Awtomatizza l-Kompiti ta' Manutenzjoni tas-Sistema Linux - Parti 4


Xi żmien ilu qrajt li waħda mill-karatteristiċi distintivi ta 'amministratur/inġinier tas-sistema effettiva hija l-għażż. Fil-bidu dehret xi ftit kontradittorja iżda l-awtur imbagħad ipproċeda biex jispjega għaliex:

jekk sysadmin iqatta 'ħafna mill-ħin tiegħu jsolvi l-kwistjonijiet u jagħmel kompiti ripetittivi, tista' tissuspetta li hu jew hi mhux qed jagħmel l-affarijiet sewwa. Fi kliem ieħor, amministratur/inġinier tas-sistema effettiv għandu jiżviluppa pjan biex iwettaq kompiti ripetittivi bl-inqas azzjoni possibbli min-naħa tiegħu/tagħha, u għandu jipprevedi problemi billi juża,

pereżempju, l-għodod riveduti fil-Parti 3 – Monitoraġġ tar-Rapporti tal-Attività tas-Sistema Bl-Użu ta’ Sett ta’ Għodda tal-Linux ta’ din is-serje. Għalhekk, għalkemm jidher li ma tantx qed jagħmel, huwa għaliex il-biċċa l-kbira tar-responsabbiltajiet tiegħu/tagħha ttieħdu ħsieb bl-għajnuna tal-shell scripting, li huwa dak li se nitkellmu dwaru f’dan it-tutorja.

X'inhu script shell?

Fi ftit kliem, script shell huwa xejn aktar u xejn inqas minn programm li jiġi esegwit pass pass minn qoxra, li huwa programm ieħor li jipprovdi saff ta 'interface bejn il-kernel tal-Linux u l-utent aħħari.

B'mod awtomatiku, il-qoxra użata għall-kontijiet tal-utent f'RHEL 7 hija bash (/bin/bash). Jekk trid deskrizzjoni dettaljata u xi sfond storiku, tista' tirreferi għal dan l-artiklu tal-Wikipedija.

Biex issir taf aktar dwar is-sett enormi ta 'karatteristiċi pprovduti minn din il-qoxra, tista' tkun trid tiċċekkja l-paġna man tagħha, li titniżżel f'format PDF fuq (Gwida minn Newbies għal artikolu SysAdmin f'linux-console.net qabel ma tipproċedi). Issa ejja nibdew.

Kitba ta 'skript biex turi l-informazzjoni tas-sistema

Għall-konvenjenza tagħna, ejja noħolqu direttorju biex taħżen l-iskripts tal-qoxra tagħna:

# mkdir scripts
# cd scripts

U iftaħ fajl test ġdid bl-isem system_info.sh bl-editur tat-test preferut tiegħek. Nibdew billi ndaħħlu ftit kummenti fil-quċċata u xi kmandi wara:

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

Sussegwentement, agħti l-permessi tal-eżekuzzjoni tal-iskritt:

# chmod +x system_info.sh

u mexxiha:

./system_info.sh

Innota li l-intestaturi ta' kull taqsima huma murija bil-kulur għal viżwalizzazzjoni aħjar:

Dik il-funzjonalità hija pprovduta minn dan il-kmand:

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

Fejn COLOR1 u COLOR2 huma l-kuluri ta’ tagħrif miksub u ta’ sfond, rispettivament (aktar informazzjoni u għażliet huma spjegati f’din l-entrata mill-Arch Linux Wiki) u hija s-sekwenza li trid turi bil-kulur.

Awtomatizzazzjoni tal-Kompiti

Il-kompiti li jista' jkollok bżonn tawtomatizza jistgħu jvarjaw minn każ għal ieħor. Għalhekk, ma nistgħux possibbilment ikopru x-xenarji kollha possibbli f'artikolu wieħed, iżda se nippreżentaw tliet kompiti klassiċi li jistgħu jiġu awtomatizzati bl-użu ta 'scripting tal-qoxra:

1) taġġorna d-database tal-fajls lokali, 2) issib (u alternattivament ħassar) fajls b'777 permess, u 3) twissi meta l-użu tas-sistema tal-fajls jaqbeż limitu definit.

Ejja noħolqu fajl bl-isem auto_tasks.sh fid-direttorju tal-iskripts tagħna bil-kontenut li ġej:

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

Jekk jogħġbok innota li hemm spazju bejn iż-żewġ sinjali < fl-aħħar linja tal-iskrittura.

Bl-użu ta' Cron

Biex tieħu l-effiċjenza pass ieħor, ma tkunx trid toqgħod bilqiegħda quddiem il-kompjuter tiegħek u tmexxi dawk l-iskripts manwalment. Pjuttost, se tuża cron biex tiskeda dawk il-kompiti biex jaħdmu fuq bażi perjodika u tibgħat ir-riżultati lil lista predefinita ta 'riċevituri permezz ta' email jew issalvahom f'fajl li jista 'jaraha permezz ta' web browser.

L-iskript li ġej (filesystem_usage.sh) se jħaddem il-kmand df -h magħruf, jifformattja l-output f'tabella HTML u ssalvah fil-fajl rapport.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

Fis-server tagħna RHEL 7 (192.168.0.18), dan jidher kif ġej:

Tista' żżid ma' dak ir-rapport informazzjoni kemm trid. Biex tmexxi l-iskript kuljum fis-1:30 pm, żid l-entrata crontab li ġejja:

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

Sommarju

X'aktarx ser taħseb f'diversi kompiti oħra li trid jew teħtieġ awtomat; kif tistgħu taraw, l-użu tal-shell scripting se jissimplifika bil-kbir dan l-isforz. Ħossok liberu li tgħarrafna jekk issibx dan l-artikolu utli u toqgħodx lura milli żżid l-ideat jew il-kummenti tiegħek permezz tal-formola hawn taħt.