Menggunakan Shell Scripting untuk Mengotomatiskan Tugas Pemeliharaan Sistem Linux - Bagian 4


Beberapa waktu lalu saya membaca bahwa salah satu ciri khas seorang administrator/insinyur sistem yang efektif adalah kemalasan. Tampaknya sedikit kontradiktif pada awalnya tetapi penulis kemudian menjelaskan alasannya:

jika seorang sysadmin menghabiskan sebagian besar waktunya untuk memecahkan masalah dan melakukan tugas yang berulang-ulang, Anda dapat menduga dia tidak melakukan sesuatu dengan benar. Dengan kata lain, administrator/insinyur sistem yang efektif harus mengembangkan rencana untuk melakukan tugas yang berulang dengan tindakan yang sesedikit mungkin, dan harus meramalkan masalah dengan menggunakan,

misalnya, alat yang diulas di Bagian 3 – Memantau Laporan Aktivitas Sistem Menggunakan Perangkat Linux pada seri ini. Oleh karena itu, meskipun dia tampaknya tidak melakukan banyak hal, itu karena sebagian besar tanggung jawabnya telah diselesaikan dengan bantuan skrip shell, itulah yang akan kita bicarakan dalam tutorial ini.

Apa itu skrip shell?

Singkatnya, skrip shell tidak lebih dan tidak kurang dari sebuah program yang dijalankan langkah demi langkah oleh shell, yang merupakan program lain yang menyediakan lapisan antarmuka antara kernel Linux dan pengguna akhir.

Secara default, shell yang digunakan untuk akun pengguna di RHEL 7 adalah bash (/bin/bash). Jika Anda menginginkan penjelasan rinci dan latar belakang sejarah, Anda dapat merujuk ke artikel Wikipedia ini.

Untuk mengetahui lebih lanjut tentang serangkaian besar fitur yang disediakan oleh shell ini, Anda mungkin ingin memeriksa halaman manual, yang diunduh dalam format PDF di (Perintah Bash). Selain itu, diasumsikan bahwa Anda sudah familiar dengan perintah-perintah Linux (jika belum, saya sangat menyarankan Anda untuk membaca artikel Panduan dari Pemula untuk SysAdmin di linux-console.net sebelum melanjutkan). Sekarang mari kita mulai.

Menulis skrip untuk menampilkan informasi sistem

Demi kenyamanan kita, mari buat direktori untuk menyimpan skrip shell kita:


mkdir scripts
cd scripts

Dan buka file teks baru bernama system_info.sh dengan editor teks pilihan Anda. Kita akan mulai dengan memasukkan beberapa komentar di bagian atas dan beberapa perintah setelahnya:


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

Selanjutnya, berikan izin eksekusi skrip:


chmod +x system_info.sh

dan jalankan:


./system_info.sh

Perhatikan bahwa header setiap bagian ditampilkan dalam warna untuk visualisasi yang lebih baik:

Fungsionalitas itu disediakan oleh perintah ini:


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

Dengan COLOR1 dan COLOR2 masing-masing merupakan warna latar depan dan latar belakang (info dan opsi lebih lanjut dijelaskan dalam entri ini dari Arch Linux Wiki) dan adalah string yang ingin Anda tampilkan berwarna.

Mengotomatiskan Tugas

Tugas yang mungkin perlu Anda otomatisasi mungkin berbeda dari satu kasus ke kasus lainnya. Oleh karena itu, kami tidak mungkin mencakup semua kemungkinan skenario dalam satu artikel, namun kami akan menyajikan tiga tugas klasik yang dapat diotomatisasi menggunakan skrip shell:

1) memperbarui basis data file lokal, 2) menemukan (dan sebagai alternatif menghapus) file dengan izin 777, dan 3) memperingatkan ketika penggunaan sistem file melebihi batas yang ditentukan.

Mari kita buat file bernama auto_tasks.sh di direktori skrip kita dengan konten berikut:


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

Harap dicatat bahwa ada spasi di antara dua tanda < di baris terakhir skrip.

Menggunakan Cron

Untuk meningkatkan efisiensi satu langkah lebih jauh, Anda tidak ingin duduk di depan komputer dan menjalankan skrip tersebut secara manual. Sebaliknya, Anda akan menggunakan cron untuk menjadwalkan tugas-tugas tersebut agar berjalan secara berkala dan mengirimkan hasilnya ke daftar penerima yang telah ditentukan sebelumnya melalui email atau menyimpannya ke file yang dapat dilihat menggunakan browser web.

Skrip berikut (filesystem_usage.sh) akan menjalankan perintah df -h yang terkenal, memformat output ke dalam tabel HTML dan menyimpannya dalam file 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

Di server RHEL 7 kami (192.168.0.18), tampilannya sebagai berikut:

Anda dapat menambahkan informasi sebanyak yang Anda inginkan ke laporan itu. Untuk menjalankan skrip setiap hari pada 13.30, tambahkan entri crontab berikut:


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

Ringkasan

Kemungkinan besar Anda akan memikirkan beberapa tugas lain yang ingin atau perlu Anda otomatisasi; seperti yang Anda lihat, menggunakan skrip shell akan sangat menyederhanakan upaya ini. Jangan ragu untuk memberi tahu kami jika Anda merasa artikel ini bermanfaat dan jangan ragu untuk menambahkan ide atau komentar Anda melalui formulir di bawah.