阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Bash 初学者系列 10:使用 bash 实现自动化

302次阅读
没有评论

共计 2904 个字符,预计需要花费 8 分钟才能阅读完成。

导读 今天我们介绍一下如何创建自动化脚本,来完成一些相对枯燥重复的管理任务。

Bash 初学者系列 10:使用 bash 实现自动化
在前面的 bash 初学者系列文章中,我们介绍了关于 bash 的一些基础知识,在了解了这些基础知识之后,可以尝试创建一些自动化脚本,来完成一些相对枯燥重复的管理任务。

今天我们介绍一下如何创建自动化脚本。

使用 bash 脚本自动化用户管理

在​​服务器上创建用户​​​可能是系统管理员经常要做的事情,这是一个相对乏味的任务,所以我们可以创建一个自动化的脚本来进行这项任务。

首先,创建一个文本文件,其中包含要添加用户的所有服务器主机名或 IP 地址。

比如,下面我们创建了一个名为 servers.txt 的文本文件,在其中添加了 5 台服务器:​

$ cat servers.txt
server1
server2
server3
server4
server5

在这里我使用的是主机名,因为已经在 /etc/hosts 文件中包含了 IP 地址(另外也可以使用 SSH 配置文件)。

然后创建一个脚本文件 adduser.sh,代码如下:

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

上述脚本首先要求我们输入要添加的用户的用户名和用户 ID,然后回循环并连接到 servers.txt 中列出的服务器,并添加用户。

运行结果如下:
Bash 初学者系列 10:使用 bash 实现自动化

通过上述例子,我们需要了解以下几点:

可以使用 ssh 代理或空的 ssh 密码,这样在运行的时候系统不会要求输入密码;
必须拥有在所有服务器上具有超级用户访问权限(无需密码)的有效帐户。
可以想象,如果你有 100 台服务器需要添加同一个新用户,使用上述脚本肯定会节省很多时间。

使用 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 的数组,用来保存要备份的目录。然后又创建了另外三个变量:

dest_dir:要备份到哪个目录;
dest_server:备份服务器;
backup_time:备份日期。
然后,对于数组 backup_dirs 中的目录,会在被压缩为 tar 归档文件,保存在 /tmp 目录下,然后使用 scp 命令将 tar 文件发送到备份服务器,最后,删除 /tmp 中的 tar 文件。

运行一下,结果如下:​

$ ./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 任务​​:

$ crontab -e
00*** /home/kabary/scripts/backup.sh
监视可用磁盘空间

我们每天做各种操作,产生的文件都会占用磁盘空间。在空间被占满之前及时删除不必要的临时文件是有必要的。我们可以使用 df 命令查看系统的剩余空间:​

$ 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 目录下其使用率为 97%,几乎没有剩余空间了。如果我使用​​ awk 命令​​​可以只显示第 5 个字段,就是使用率。

现在我们创建脚本 disk_space.sh,如下:​

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

上述代码,首先创建了一个数组 filesystems,用于保存要监视的目录,然后便利这个数组,查看其中每个目录的使用率是否大于 90%,如果使用率超过 90%,就会发送一封警告电子邮件,提示文件空间不足。

这里需要注意,带啊中的 your_email 需要替换为真实的邮件。

运行一下,结果如下:​

$ ./disk_space.sh
Sending out a disk space alert email.

然后收到的电子邮件如下所示:
Bash 初学者系列 10:使用 bash 实现自动化
同样,也可以为其设置定时任务:​

$ crontab -e
0*/6 *** /home/kabary/scripts/disk_space.sh

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2904字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799799
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...