GNU/Linux >> Belajar Linux >  >> Linux

Bash Pemula Seri #10:Otomatisasi Dengan Bash

Sekarang Anda dapat menggunakan semua keterampilan bash yang telah Anda pelajari di Seri Pemula Bash ini untuk membuat skrip bash yang sangat berguna yang akan membantu Anda dalam mengotomatiskan tugas administratif berulang yang membosankan.

Otomatisasi harus benar-benar menjadi tujuan utama Anda setiap kali Anda menulis skrip bash.

Dalam tutorial ini, saya akan menunjukkan kepada Anda beberapa skrip otomatisasi yang nantinya dapat Anda kembangkan untuk mengotomatisasi tugas apa pun yang Anda inginkan. Skrip ini akan menggunakan bash array, if-else, loop, dan konsep lain yang telah Anda pelajari dalam seri ini.

Mengotomatiskan pengelolaan pengguna dengan skrip bash

Membuat pengguna di beberapa server mungkin sesuatu yang Anda lakukan setiap hari sebagai sysadmin. Ini adalah tugas yang membosankan, jadi mari kita buat skrip bash yang mengotomatiskannya.

Pertama, buat file teks yang menyertakan semua nama host server atau alamat IP tempat Anda ingin menambahkan pengguna.

Sebagai contoh, di sini saya membuat file servers.txt yang mencakup lima server berbeda:

[email protected]:~$ cat servers.txt
server1
server2
server3
server4
server5

Perlu diingat, bahwa saya telah menggunakan nama host server karena saya telah menyertakan alamat IP di /etc/hosts saya mengajukan. Anda juga dapat menggunakan file konfigurasi SSH di sini.

Sekarang lihat adduser.sh berikut ini skrip bash:

#!/bin/bash

servers=$(cat servers.txt)

echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid

for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done

adduser.sh script pertama akan meminta Anda untuk memasukkan nama pengguna dan id pengguna dari pengguna yang ingin Anda tambahkan; kemudian, itu akan berulang dan terhubung ke semua server di servers.txt file melalui SSH dan tambahkan pengguna yang diminta.

Mari jalankan skrip dan lihat cara kerjanya:

Skrip berjalan dengan sukses dan kemungkinan pengguna telah ditambahkan di kelima server. Ada beberapa poin penting di sini yang perlu Anda pahami:

  • Anda dapat menggunakan ssh kosong berikan frasa atau jalankan ssh-agent untuk menghindari diminta memasukkan kunci (atau kata sandi) saat skrip sedang berjalan.
  • Anda harus memiliki akun valid yang memiliki akses pengguna super (tanpa persyaratan sandi) di semua server.

Bayangkan Anda perlu menambahkan pengguna di 100+ server Linux yang berbeda! adduser.sh skrip pasti dapat menghemat banyak waktu kerja Anda.

Mengotomatiskan pencadangan dengan skrip bash

Mengambil cadangan adalah sesuatu yang kita semua lakukan secara teratur, jadi mengapa tidak mengotomatiskannya? Lihatlah backup.sh berikut ini naskah:

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Starting backup of: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done

sudo rm /tmp/*.gzecho "Backup is done."

Jadi, pertama-tama Anda membuat array bernama backup_dirs yang menyimpan semua nama direktori yang ingin kita backup. Kemudian, Anda membuat tiga variabel lain:

  • tujuan_dir: Untuk menentukan direktori tujuan pencadangan.
  • server_tujuan: Untuk menentukan server tujuan pencadangan.
  • waktu_cadangan: Untuk menentukan tanggal pencadangan.

Selanjutnya, untuk semua direktori di backup_dirs array, buat arsip tar terkompresi gzip di /tmp , lalu gunakan scp perintah untuk mengirim/menyalin cadangan ke server tujuan. Terakhir, hapus semua arsip gzip dari /tmp .

Berikut adalah contoh menjalankan backup.sh naskah:

[email protected]:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s   00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s   00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100%  105MB 520.2KB/s   03:26
/boot transfer succeeded.
Backup is done.

Anda mungkin ingin menjalankan mengambil cadangan setiap hari di tengah malam. Dalam hal ini, Anda dapat menjadwalkan skrip untuk dijalankan sebagai tugas cron:

[email protected]:~$ crontab -e
0	0	*	*	* /home/kabary/scripts/backup.sh

Memantau ruang disk yang tersedia


Sistem file ditakdirkan untuk kehabisan ruang, satu-satunya hal yang dapat Anda lakukan adalah bertindak cepat sebelum sistem Anda mogok! Anda dapat menggunakan perintah df untuk melihat ruang yang tersisa pada sistem file apa pun:

[email protected]:~$ df -h / /apps /database
Filesystem Size  Used Avail Use% Mounted on
/dev/sda5 20G  7.9G   11G  44% /
/dev/mapper/vg1-applv 4.9G  2.4G  2.3G  52% /apps
/dev/mapper/vg1-dblv 4.9G  4.5G  180M  97% /database

/database My saya sistem file hampir kehabisan ruang karena saat ini penggunaan 97%. Saya hanya dapat menampilkan penggunaan jika saya menggunakan perintah awk untuk hanya menampilkan bidang kelima.

Sekarang lihat disk_space.sh berikut ini skrip bash:

#!/bin/bash
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Running out of space on $i, Usage is: $usage%"
echo "Sending out a disk space alert email."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done

Pertama, Anda membuat sistem file array yang menampung semua sistem file yang ingin Anda pantau. Kemudian, untuk setiap sistem file, Anda mengambil persentase penggunaan dan memeriksa untuk melihat apakah lebih besar dari atau sama dengan 90. Jika penggunaan di atas 90%, ia akan mengirimkan email peringatan yang menunjukkan bahwa sistem file kehabisan ruang.

Perhatikan bahwa Anda perlu mengganti your_email dalam skrip dengan email Anda yang sebenarnya.

Saya menjalankan skrip:

[email protected]:~$ ./disk_space.sh
Sending out a disk space alert email.

Dan saya mendapatkan email berikut di kotak masuk saya:

Anda mungkin ingin menjalankan disk_space.sh skrip enam jam atau lebih. Dalam hal ini, Anda juga dapat menjadwalkan skrip untuk dijalankan sebagai tugas cron:

[email protected]:~$ crontab -e
0	*/6 *		*		* /home/kabary/scripts/disk_space.sh

Anda dapat berlatih lagi dengan mencoba memecahkan masalah yang disajikan dalam buku kerja di bawah ini. Dan ya, mereka juga menyertakan jawabannya.

Bash Bab 10 Latihan PertanyaanMasalah dan solusinya untuk mempraktikkan apa yang baru saja Anda pelajari di bab iniBash-Bab-10-Pertanyaan-Latihan-Buku Pegangan-Linux.pdf40 KB

Ini membawa kita ke akhir seri tutorial bash pemula kami. Saya harap Anda menikmati belajar skrip bash. Dengan skrip bash di gudang keahlian Anda, Anda dapat mengotomatiskan tugas yang membosankan dan membosankan di Linux!

Seluruh Seri Bash Pemula juga tersedia dalam format PDF. Anda dapat membelinya untuk mendukung kami. Buku ini tersedia secara gratis (bersama dengan beberapa buku lain untuk anggota Pro kami).

Beli Seri Bash Pemula dalam Bentuk PDF
Linux
  1. Penerjemah Shell mana yang Menjalankan Skrip Tanpa Shebang?

  2. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  3. Bash Seri Pemula #8:Loop di Bash

  1. Skrip Bash Dengan `set -e` Tidak Berhenti Pada Perintah `… &&...`?

  2. Tidak Dapat Menghentikan Skrip Bash Dengan Ctrl+c?

  3. Izin ditolak dengan bash.sh untuk menjalankan cron

  1. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  2. nama dasar dengan spasi dalam skrip bash?

  3. Cara membunuh skrip python dengan skrip bash