ການໃຊ້ Shell Scripting ເພື່ອອັດຕະໂນມັດວຽກງານ ບຳ ລຸງຮັກສາລະບົບ Linux - ພາກທີ 4


ບາງຄັ້ງທີ່ຜ່ານມາຂ້າພະເຈົ້າໄດ້ອ່ານວ່າ ໜຶ່ງ ໃນຄຸນລັກສະນະທີ່ໂດດເດັ່ນຂອງຜູ້ບໍລິຫານ/ວິສະວະກອນທີ່ມີປະສິດຕິພາບຂອງລະບົບແມ່ນຂີ້ກຽດ. ໃນຕອນ ທຳ ອິດມັນເບິ່ງຄືວ່າມັນຂັດແຍ້ງເລັກ ໜ້ອຍ ແຕ່ຜູ້ຂຽນຈາກນັ້ນໄດ້ອະທິບາຍວ່າເປັນຫຍັງ:

ຖ້າ sysadmin ໃຊ້ເວລາສ່ວນໃຫຍ່ຂອງລາວໃນການແກ້ໄຂບັນຫາແລະເຮັດວຽກຊໍ້າຊາກ, ທ່ານສາມາດສົງໃສວ່າລາວບໍ່ໄດ້ເຮັດສິ່ງທີ່ຖືກຕ້ອງ. ເວົ້າອີກຢ່າງ ໜຶ່ງ, ຜູ້ຄຸ້ມຄອງລະບົບ/ວິສະວະກອນທີ່ມີປະສິດຕິພາບຄວນພັດທະນາແຜນການໃນການປະຕິບັດວຽກງານຊໍ້າຊາກດ້ວຍການປະຕິບັດງານຂອງຕົນເອງ ໜ້ອຍ ທີ່ສຸດເທົ່າທີ່ຈະເປັນໄປໄດ້, ແລະຄວນເບິ່ງເຫັນບັນຫາໂດຍການໃຊ້,

ຍົກຕົວຢ່າງ, ເຄື່ອງມືທີ່ຖືກທົບທວນໃນພາກທີ 3 - ຕິດຕາມການລາຍງານການເຄື່ອນໄຫວຂອງລະບົບໂດຍໃຊ້ເຄື່ອງມື Linux ຂອງຊຸດນີ້. ດັ່ງນັ້ນ, ເຖິງວ່າລາວອາດເບິ່ງຄືວ່າບໍ່ໄດ້ເຮັດຫຍັງຫຼາຍ, ມັນກໍ່ຍ້ອນວ່າຄວາມຮັບຜິດຊອບສ່ວນໃຫຍ່ຂອງລາວໄດ້ຮັບການເບິ່ງແຍງດ້ວຍການຊ່ວຍເຫຼືອຂອງການຂຽນ ໜັງ ສື, ເຊິ່ງແມ່ນສິ່ງທີ່ພວກເຮົາຈະເວົ້າກ່ຽວກັບບົດແນະ ນຳ ນີ້.

ຂຽນຫອຍແມ່ນຫຍັງ?

ໃນບາງ ຄຳ ສັບ, ສະຄິບຫອຍແມ່ນບໍ່ມີຫຍັງອີກແລະບໍ່ມີຫຍັງເລີຍນອກຈາກໂປຣແກຣມທີ່ຖືກ ດຳ ເນີນຂັ້ນຕອນໂດຍຫອຍເຊິ່ງເປັນອີກໂປຣແກຣມ ໜຶ່ງ ທີ່ໃຫ້ຊັ້ນການໂຕ້ຕອບລະຫວ່າງ Linux kernel ແລະຜູ້ໃຊ້ສຸດທ້າຍ.

ໂດຍຄ່າເລີ່ມຕົ້ນ, ຫອຍທີ່ໃຊ້ ສຳ ລັບບັນຊີຜູ້ໃຊ້ໃນ RHEL 7 ແມ່ນ bash (/ bin/bash). ຖ້າທ່ານຕ້ອງການລາຍລະອຽດແລະພື້ນຖານປະຫວັດສາດບາງຢ່າງ, ທ່ານສາມາດອ້າງອີງເຖິງບົດຄວາມ Wikipedia ນີ້.

ເພື່ອຊອກຮູ້ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຄຸນລັກສະນະທີ່ໃຫຍ່ຫຼວງທີ່ສະ ໜອງ ໂດຍຫອຍນີ້, ທ່ານອາດຕ້ອງການກວດເບິ່ງ ໜ້າ man ຂອງມັນ, ເຊິ່ງຖືກດາວໂຫລດເປັນຮູບແບບ PDF ທີ່ (A ຄູ່ມືຈາກ Newbies ເຖິງບົດຂຽນ SysAdmin ໃນ linux-console.net ກ່ອນ ດຳ ເນີນການ). ດຽວນີ້ເລີ່ມຕົ້ນແລ້ວ.

ຂຽນຄິບເພື່ອສະແດງຂໍ້ມູນຂອງລະບົບ

ເພື່ອຄວາມສະດວກສະບາຍຂອງພວກເຮົາ, ໃຫ້ສ້າງເສັ້ນທາງເພື່ອເກັບສະຄິບແກະຂອງພວກເຮົາ:

# mkdir scripts
# cd scripts

ແລະເປີດແຟ້ມຂໍ້ຄວາມ ໃໝ່ ທີ່ມີຊື່ວ່າ system_info.sh ກັບຕົວແກ້ໄຂຂໍ້ຄວາມທີ່ທ່ານຕ້ອງການ. ພວກເຮົາຈະເລີ່ມຕົ້ນດ້ວຍການໃສ່ ຄຳ ເຫັນ ຈຳ ນວນ ໜຶ່ງ ຢູ່ເທິງສຸດແລະບາງ ຄຳ ສັ່ງຕໍ່ມາ:

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

ຕໍ່ໄປ, ໃຫ້ສິດໃນການຂຽນບົດ:

# chmod +x system_info.sh

ແລະດໍາເນີນການມັນ:

./system_info.sh

ໃຫ້ສັງເກດວ່າສ່ວນຫົວຂອງແຕ່ລະພາກສ່ວນແມ່ນສະແດງເປັນສີເພື່ອເບິ່ງເຫັນພາບທີ່ດີກວ່າ:

ໜ້າ ທີ່ນັ້ນແມ່ນສະ ໜອງ ໃຫ້ໂດຍ ຄຳ ສັ່ງນີ້:

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

ບ່ອນທີ່ COLOR1 ແລະ COLOR2 ແມ່ນສີເບື້ອງຕົ້ນແລະພື້ນຫລັງຕາມ ລຳ ດັບ (ຂໍ້ມູນເພີ່ມເຕີມແລະທາງເລືອກໄດ້ຖືກອະທິບາຍໄວ້ໃນຂໍ້ມູນນີ້ຈາກ Arch Linux Wiki) ແລະ ນີ້ແມ່ນສາຍເຊືອກທີ່ທ່ານຕ້ອງການສະແດງເປັນສີ.

ວຽກອັດຕະໂນມັດ

ວຽກງານທີ່ທ່ານອາດຈະຕ້ອງໄດ້ອັດຕະໂນມັດອາດຈະແຕກຕ່າງກັນໄປເລື້ອຍໆ. ດັ່ງນັ້ນ, ພວກເຮົາບໍ່ສາມາດປົກປິດສະຖານະການທີ່ເປັນໄປໄດ້ທັງ ໝົດ ໃນບົດຄວາມດຽວ, ແຕ່ພວກເຮົາຈະ ນຳ ສະ ເໜີ ວຽກງານສາມຢ່າງທີ່ສາມາດອັດຕະໂນມັດໄດ້ໂດຍການໃຊ້ shell scripting:

1) ປັບປຸງຖານຂໍ້ມູນເອກະສານໃນທ້ອງຖິ່ນ, 2) ຊອກຫາ (ແລະທາງເລືອກລຶບ) ໄຟລ໌ທີ່ມີສິດ 777, ແລະ 3) ແຈ້ງເຕືອນເມື່ອການ ນຳ ໃຊ້ລະບົບແຟ້ມຂໍ້ມູນເກີນຂອບເຂດທີ່ໄດ້ ກຳ ນົດໄວ້.

ໃຫ້ສ້າງເອກະສານທີ່ມີຊື່ວ່າ auto_tasks.sh ໃນລາຍຊື່ສະຄິບຂອງພວກເຮົາທີ່ມີເນື້ອຫາຕໍ່ໄປນີ້:

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

ກະລຸນາຮັບຊາບວ່າມີຊ່ອງຫວ່າງລະຫວ່າງສອງສັນຍາລັກ < ຢູ່ແຖວສຸດທ້າຍຂອງບົດຂຽນ.

ການໃຊ້ Cron

ເພື່ອໃຫ້ມີປະສິດທິພາບອີກ ໜຶ່ງ ບາດກ້າວ, ທ່ານຈະບໍ່ຕ້ອງການນັ່ງຢູ່ທາງ ໜ້າ ຄອມພິວເຕີຂອງທ່ານແລະ ດຳ ເນີນການສະຄິບເຫລົ່ານັ້ນດ້ວຍຕົນເອງ. ກົງກັນຂ້າມ, ທ່ານຈະໃຊ້ cron ເພື່ອຈັດຕາຕະລາງວຽກເຫຼົ່ານັ້ນໃຫ້ເປັນແຕ່ລະໄລຍະແລະສົ່ງຜົນໄດ້ຮັບໄປຍັງບັນຊີລາຍຊື່ຜູ້ຮັບທີ່ໄດ້ ກຳ ນົດໄວ້ຜ່ານທາງອີເມວຫຼືບັນທຶກໄວ້ໃນເອກະສານທີ່ສາມາດເບິ່ງໄດ້ໂດຍໃຊ້ໂປແກຼມທ່ອງເວັບ

ສະຄິບຕໍ່ໄປນີ້ (filesystem_usage.sh) ຈະເອີ້ນໃຊ້ ຄຳ ສັ່ງ df -h ທີ່ມີຊື່ສຽງ, ຈັດຮູບແບບຜົນຜະລິດເຂົ້າໃນຕາຕະລາງ HTML ແລະເກັບມັນໄວ້ໃນເອກະສານ 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

ໃນເຊີຟເວີ RHEL 7 ຂອງພວກເຮົາ (192.168.0.18), ນີ້ມີດັ່ງນີ້:

ທ່ານສາມາດເພີ່ມເຂົ້າໃນບົດລາຍງານນັ້ນຫຼາຍເທົ່າທີ່ທ່ານຕ້ອງການ. ເພື່ອ ດຳ ເນີນການຂຽນບົດທຸກໆມື້ເວລາ 1 ໂມງ 30 ນາທີ, ຕື່ມການເຂົ້າ crontab ຕໍ່ໄປນີ້:

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

ບົດສະຫຼຸບ

ທ່ານສ່ວນຫຼາຍຈະຄິດເຖິງວຽກອື່ນໆອີກຫຼາຍຢ່າງທີ່ທ່ານຕ້ອງການຫລືຕ້ອງການໂດຍອັດຕະໂນມັດ; ດັ່ງທີ່ທ່ານສາມາດເຫັນໄດ້, ການໃຊ້ແກະສະຄິບຈະເຮັດໃຫ້ຄວາມພະຍາຍາມນີ້ງ່າຍຂື້ນ. ຮູ້ສຶກວ່າບໍ່ເສຍຄ່າທີ່ຈະແຈ້ງໃຫ້ພວກເຮົາຮູ້ຖ້າທ່ານເຫັນວ່າບົດຂຽນນີ້ມີປະໂຫຍດແລະບໍ່ກ້າທີ່ຈະເພີ່ມແນວຄວາມຄິດຫລື ຄຳ ເຫັນຂອງທ່ານເອງຜ່ານແບບຟອມລຸ່ມນີ້.