当前位置: 首页 > 科技观察

Bash入门系列10:使用bash实现自动化

时间:2023-03-12 21:15:44 科技观察

在之前的bash入门系列中,我们介绍了一些关于bash的基础知识。了解了这些基础之后,你就可以尝试创建一些自动化脚本来完成一些比较枯燥重复的管理工作。今天我们介绍如何创建自动化脚本。使用Bash脚本自动化用户管理在服务器上创建用户可能是系统管理员经常做的事情,这是一项相对繁琐的工作,因此我们可以创建一个自动化脚本来完成它。首先,创建一个文本文件,其中包含要添加用户的所有服务器主机名或IP地址。例如,下面我们创建一个名为servers.txt的文本文件并向其中添加5个服务器:$catservers.txtserver1server2server3server4server5这里我使用主机名,因为它已经包含在/etc/hosts文件中IP地址(或者SSH配置文件)也可以使用)。然后创建一个脚本文件adduser.sh,代码如下:#!/bin/bashservers=$(catservers.txt)echo-n》输入用户名:》readnameecho-n》输入用户id:》read$servers中的uidfori;如果[$?-eq0];thenecho"User$nameaddedon$i"elseecho"Erroron$i"fidone上面的脚本首先要求我们输入我们要添加的用户的用户名和userid,然后循环返回并连接到列出的服务器servers.txt,并添加用户。运行结果如下:通过上面的例子,我们需要明白以下几点:可以使用ssh代理或者空ssh密码,这样系统运行时就不会要求输入密码;您必须拥有所有服务器的超级用户访问权限(无需密码)才能获得有效帐户。可以想象,如果你有100台服务器需要添加同一个新用户,使用上面的脚本肯定会节省很多时间。使用bash脚本自动备份是我们经常做的事情,所以写一个自动备份脚本来自动化是非常方便的。查看以下backup.sh脚本:#!/bin/bashbackup_dirs=("/etc""/home""/boot")dest_dir="/backup"dest_server="server1"backup_date=$(date+%b-%d-%y)echo"Startingbackupof:${backup_dirs[@]}"foriin"${backup_dirs[@]}";如果[$?-eq0];然后echo"$i备份成功。"elseecho"$i备份失败。"fiscp/tmp/$i-$backup_date.tar.gz$dest_server:$dest_dirif[$?-当量0];然后回显“$i传输成功。”elseecho"$i传输失败。"fidonesudorm/tmp/*.gzecho“备份完成。”上面的脚本首先创建了一个名为backup_dirs的数组,用来保存要备份的目录。然后再创建三个变量:dest_dir:备份到哪个目录;dest_server:备份服务器;backup_time:备份日期。然后,对于数组backup_dirs中的目录,将其压缩成一个tar归档文件,保存在/tmp目录下,然后使用scp命令将tar文件发送到备份服务器,最后,删除tar文件在/tmp.运行,结果如下:$./backup.shStartingbackupof:/etc/home/boot/etcbackupsucceeded.etc-Aug-30-20.tar.gz100%1288KB460.1KB/s00:02/etc传输成功。/home备份成功。home-Aug-30-20.tar.gz100%2543KB547.0KB/s00:04/home传输成功。/boot备份成功。boot-Aug-30-20。tar.gz100%105MB520.2KB/s03:26/boot传输成功。备份完成。如果你想在每天的某个时间(比如晚上)自动运行备份脚本,你可以做一个cron任务:$crontab-e00***/home/kabary/scripts/backup.sh监控可用磁盘空间我们每天做各种操作,生成的文件会占用磁盘空间。需要在空间被填满前及时删除不需要的临时文件。我们可以使用df命令查看系统剩余空间:$df-h//apps/databaseFilesystemSizeUsedAvailUse%Mountedon/dev/sda520G7.9G11G44%//dev/mapper/vg1-applv4.9G2.4G2.3G52%/apps/dev/mapper/vg1-dblv4.9G4.5G180M97%/database在/database目录下,其利用率为97%,几乎没有剩余空间。如果我使用awk命令,我只能显示第5个字段,即用法。现在我们创建脚本disk_space.sh如下:#!/bin/bashfilesystems=("/""/apps""/database")foriin${filesystems[@]};dousage=$(df-h$i|tail-n1|awk'{print$5}'|cut-d%-f1)if[$usage-ge90];thenalert="Runningoutofspaceon$i,Usageis:$usage%"echo"发送磁盘空间警告电子邮件。"回声$警报|mail-s"$iis$usage%full"your_emailfidone上面代码先创建一个数组filesystems来保存要监控的目录,然后方便这个数组,查看每个目录的利用率是否大于90%,如果使用率超过90%,会发送警告邮件,提示文件空间不足。这里需要注意的是,磁带中的your_email需要换成真实的email。运行它,结果如下:$./disk_space.sh发出磁盘空间警报邮件。那么收到的邮件如下:同样的,你也可以给它设置一个定时任务:$crontab-e0*/6***/home/kabary/scripts/disk_space.sh