GNU/Linux >> Linux の 問題 >  >> Linux

Bash初心者シリーズ#10:Bashによる自動化

これで、このBash初心者シリーズで学習したすべてのbashスキルを使用して、退屈な反復的な管理タスクの自動化に役立つ非常に便利なbashスクリプトを作成できます。

bashスクリプトを作成するときは常に、自動化が最終的な目標になるはずです。

このチュートリアルでは、後で拡張して必要なタスクを自動化できる自動化スクリプトをいくつか紹介します。これらのスクリプトは、bash配列、if-else、ループ、およびこのシリーズで学習したその他の概念を利用します。

bashスクリプトを使用したユーザー管理の自動化

複数のサーバー上にユーザーを作成することは、システム管理者として日常的に行うことかもしれません。面倒な作業なので、自動化するbashスクリプトを作成しましょう。

まず、ユーザーを追加するすべてのサーバーのホスト名またはIPアドレスを含むテキストファイルを作成します。

たとえば、ここでファイル servers.txtを作成しました これには5つの異なるサーバーが含まれます:

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

/ etc / hosts にIPアドレスをすでに含めているため、サーバーのホスト名を使用していることに注意してください。 ファイル。ここでSSH構成ファイルを使用することもできます。

次に、次の adduser.shを見てください。 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 スクリプトは最初に、追加するユーザーのユーザー名とユーザーIDを入力するように求めます。次に、ループして servers.txt内のすべてのサーバーに接続します SSH経由でファイルし、要求されたユーザーを追加します。

スクリプトを実行して、どのように機能するかを見てみましょう。

スクリプトは正常に実行され、5つのサーバーすべてにユーザーansibleが追加されました。ここで理解する必要のある重要なポイントがいくつかあります。

  • 空のsshを使用できます フレーズを渡すか、 ssh-agentを実行します スクリプトの実行中にキー(またはパスワード)の入力を求められないようにするため。
  • すべてのサーバーで(パスワードを必要とせずに)スーパーユーザーアクセス権を持つ有効なアカウントが必要です。

100以上の異なるLinuxサーバーにユーザーを追加する必要があると想像してみてください。 adduser.sh スクリプトを使用すると、数え切れないほどの作業時間を確実に節約できます。

bashスクリプトを使用したバックアップの自動化

バックアップを取ることは私たち全員が定期的に行うことなので、自動化してみませんか?次のbackup.shをご覧ください。 スクリプト:

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

したがって、最初に backup_dirsという名前のアレイを作成しました バックアップするすべてのディレクトリ名を保存します。次に、他の3つの変数を作成しました。

  • dest_dir: バックアップ先ディレクトリを指定します。
  • dest_server: バックアップ先サーバーを指定します。
  • backup_time: バックアップの日付を指定します。

次に、 backup_dirs内のすべてのディレクトリについて 配列、 / tmpにgzip圧縮されたtarアーカイブを作成します 、次にscp を使用します バックアップを宛先サーバーに送信/コピーするコマンド。最後に、すべてのgzipアーカイブを / tmpから削除します 。

これがbackup.shの実行例です。 スクリプト:

[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.

毎日深夜にバックアップを取ることを実行することをお勧めします。この場合、スクリプトをcronジョブとして実行するようにスケジュールできます。

[email protected]:~$ crontab -e
0	0	*	*	* /home/kabary/scripts/backup.sh
使用可能なディスクスペースの監視


ファイルシステムはスペースを使い果たす運命にあります。あなたができる唯一のことは、システムがクラッシュする前に迅速に行動することです! を使用できます ファイルシステムの残りのスペースを確認するためのdfコマンド:

[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

私の/データベース ファイルシステムは現在97%の使用率であるため、ほとんどスペースが不足しています。 awkコマンドを使用して5番目のフィールドのみを表示した場合、使用状況のみを表示できます。

次に、次の disk_space.shを見てください。 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

まず、ファイルシステムを作成しました 監視するすべてのファイルシステムを保持する配列。次に、ファイルシステムごとに、使用率を取得して、使用率が90以上かどうかを確認します。使用率が90%を超えると、ファイルシステムの容量が不足していることを示すアラートメールが送信されます。

your_emailを置き換える必要があることに注意してください スクリプト内の実際のメールアドレス。

スクリプトを実行しました:

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

そして、受信トレイに次のメールが届きました:

disk_space.shを実行することをお勧めします 6時間かそこらのスクリプト。この場合、スクリプトをcronジョブとして実行するようにスケジュールすることもできます。

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

以下のワークブックに示されている問題を解決することで、もう少し練習することができます。はい、答えも含まれています。

Bash第10章練習問題この章で学んだことを練習するための問題とその解決策Bash-Chapter-10-Practice-Questions-Linux-Handbook.pdf40KB

これで、bash初心者向けチュートリアルシリーズは終了です。 bashスクリプトの学習を楽しんでいただけたでしょうか。スキルの武器にbashスクリプトを使用すると、Linuxでの退屈で退屈なタスクを自動化できます!

Bashビギナーシリーズ全体もPDF形式で入手できます。あなたは私たちをサポートするためにそれを購入することができます。この本は無料で入手できます(プロメンバー向けの他のいくつかの本と一緒に)。

Bash初心者シリーズをPDF形式で購入する
Linux
  1. BashスクリプトのRmコマンドは変数では機能しませんか?

  2. Ctrl + cでBashスクリプトを停止できませんか?

  3. Bash初心者シリーズ#9:Bashでの関数の使用

  1. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

  2. `set -e`を使用したBashスクリプトは`…&&…`コマンドで停止しませんか?

  3. Bash初心者シリーズ#8:Bashのループ

  1. bashスクリプトにスペースを含むベース名?

  2. bash.sh で cron を実行する権限が拒否されました

  3. bash スクリプトを使用して $PYTHONPATH に追加する