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