0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何創(chuàng)建自動(dòng)化腳本

CHANBAEK ? 來源:TIAP ? 作者:TIAP ? 2023-01-04 16:50 ? 次閱讀

在前面的 bash 初學(xué)者系列文章中,我們介紹了關(guān)于 bash 的一些基礎(chǔ)知識(shí),在了解了這些基礎(chǔ)知識(shí)之后,可以嘗試創(chuàng)建一些自動(dòng)化腳本,來完成一些相對(duì)枯燥重復(fù)的管理任務(wù)。

今天我們介紹一下如何創(chuàng)建自動(dòng)化腳本。

使用 bash 腳本自動(dòng)化用戶管理

在服務(wù)器上創(chuàng)建用戶可能是系統(tǒng)管理員經(jīng)常要做的事情,這是一個(gè)相對(duì)乏味的任務(wù),所以我們可以創(chuàng)建一個(gè)自動(dòng)化的腳本來進(jìn)行這項(xiàng)任務(wù)。

首先,創(chuàng)建一個(gè)文本文件,其中包含要添加用戶的所有服務(wù)器主機(jī)名或IP地址。

比如,下面我們創(chuàng)建了一個(gè)名為 servers.txt 的文本文件,在其中添加了5臺(tái)服務(wù)器:

$ cat servers.txt
server1
server2
server3
server4
server5

在這里我使用的是主機(jī)名,因?yàn)橐呀?jīng)在 /etc/hosts 文件中包含了IP地址(另外也可以使用 SSH 配置文件)。

然后創(chuàng)建一個(gè)腳本文件 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,然后回循環(huán)并連接到 servers.txt 中列出的服務(wù)器,并添加用戶。

運(yùn)行結(jié)果如下:

通過上述例子,我們需要了解以下幾點(diǎn):

  • 可以使用 ssh 代理或空的 ssh 密碼,這樣在運(yùn)行的時(shí)候系統(tǒng)不會(huì)要求輸入密碼;
  • 必須擁有在所有服務(wù)器上具有超級(jí)用戶訪問權(quán)限(無(wú)需密碼)的有效帳戶。

可以想象,如果你有100臺(tái)服務(wù)器需要添加同一個(gè)新用戶,使用上述腳本肯定會(huì)節(jié)省很多時(shí)間。

使用 bash 腳本自動(dòng)備份

備份是我們經(jīng)常做的事情,那寫個(gè)自動(dòng)備份的腳本來自動(dòng)化實(shí)現(xiàn),是非常方便的。看如下 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."

上面腳本,首先創(chuàng)建了一個(gè)名為 backup_dirs 的數(shù)組,用來保存要備份的目錄。然后又創(chuàng)建了另外三個(gè)變量:

  • dest_dir :要備份到哪個(gè)目錄;
  • dest_server :備份服務(wù)器;
  • backup_time :備份日期。

然后,對(duì)于數(shù)組 backup_dirs 中的目錄,會(huì)在被壓縮為 tar 歸檔文件,保存在 /tmp 目錄下,然后使用 scp 命令將 tar 文件發(fā)送到備份服務(wù)器,最后,刪除 /tmp 中的 tar 文件。

運(yùn)行一下,結(jié)果如下:

$ ./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.

如果你希望每天在某個(gè)時(shí)間點(diǎn)(比如晚上)都自動(dòng)運(yùn)行備份腳本,可以制定 cron 任務(wù):

$ crontab -e
00*** /home/kabary/scripts/backup.sh

監(jiān)視可用磁盤空間

我們每天做各種操作,產(chǎn)生的文件都會(huì)占用磁盤空間。在空間被占滿之前及時(shí)刪除不必要的臨時(shí)文件是有必要的。我們可以使用 df 命令查看系統(tǒng)的剩余空間:

$ 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 個(gè)字段,就是使用率。

現(xiàn)在我們創(chuàng)建腳本 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

上述代碼,首先創(chuàng)建了一個(gè)數(shù)組 filesystems,用于保存要監(jiān)視的目錄,然后便利這個(gè)數(shù)組,查看其中每個(gè)目錄的使用率是否大于 90%,如果使用率超過 90%,就會(huì)發(fā)送一封警告電子郵件,提示文件空間不足。

這里需要注意,帶啊中的 your_email 需要替換為真實(shí)的郵件。

運(yùn)行一下,結(jié)果如下:

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

然后收到的電子郵件如下所示:

圖片

同樣,也可以為其設(shè)置定時(shí)任務(wù):

$ crontab -e
0*/6 *** /home/kabary/scripts/disk_space.sh
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自動(dòng)化
    +關(guān)注

    關(guān)注

    28

    文章

    5438

    瀏覽量

    78909
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    384

    瀏覽量

    14794
  • Bash
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    10153
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹10個(gè)Python自動(dòng)化腳本

    在這個(gè)自動(dòng)化時(shí)代,我們有很多重復(fù)無(wú)聊的工作要做。想想這些你不再需要一次又一次地做的無(wú)聊的事情,讓它自動(dòng)化,讓你的生活更輕松。那么在本文中,我將向您介紹 10 個(gè) Python 自動(dòng)化腳本
    發(fā)表于 10-17 09:27 ?915次閱讀

    10個(gè)Python腳本來自動(dòng)化你的日常任務(wù)

    今天浩道跟大家分享幾個(gè)關(guān)于python自動(dòng)化日常工作的實(shí)用案例腳本
    發(fā)表于 10-25 09:04 ?700次閱讀

    10個(gè)殺手級(jí)的Python自動(dòng)化腳本

    今天浩道跟大家分享10個(gè)日常工作中用到的python自動(dòng)化腳本。讓你感受一番python簡(jiǎn)單強(qiáng)大之處!
    發(fā)表于 11-28 11:07 ?659次閱讀

    FPGA設(shè)計(jì)之自動(dòng)化

    個(gè)DOS系統(tǒng)工具,即Batch(批處理),了解DOS系統(tǒng)的應(yīng)該知道什么批處理。如參考[3]一樣建立一個(gè)TCL文件,再創(chuàng)建一個(gè)Batch文件就可以實(shí)現(xiàn)所謂的“自動(dòng)化”了。準(zhǔn)備階段,目錄下只有Batch
    發(fā)表于 12-16 15:09

    手機(jī)自動(dòng)化測(cè)試方法

    腳本生成后點(diǎn)擊調(diào)試按鈕 8.點(diǎn)擊左下角的啟動(dòng)鍵進(jìn)行腳本回放,不要控制鼠標(biāo),此時(shí)鼠標(biāo)會(huì)自動(dòng)點(diǎn)擊小蘿貝控機(jī)大師進(jìn)而控制手機(jī)進(jìn)行手機(jī)APP自動(dòng)化測(cè)試 `
    發(fā)表于 07-05 15:07

    自動(dòng)化測(cè)試腳本開發(fā)技巧

    開發(fā)自動(dòng)化測(cè)試腳本的技巧和心得軟件測(cè)試 增量式調(diào)試腳本 錄制測(cè)試腳本,和其他的軟件開發(fā)成果一樣,會(huì)變得非常大。為了可以成功的回放,需要調(diào)試幾百行的代碼,為了參數(shù)
    發(fā)表于 03-26 16:24 ?53次下載

    iOS自動(dòng)化打包腳本

    iOS自動(dòng)化打包腳本,地址:(https://github.com/hades0918/ipapy) iOS項(xiàng)目自動(dòng)打包腳本 1.腳本
    發(fā)表于 10-12 16:47 ?0次下載

    虛擬自動(dòng)化中AI的重要性

    虛擬自動(dòng)化的主要好處之一是消除每個(gè)系統(tǒng)中的人工干預(yù)和手動(dòng)編寫腳本。管理員可以集中創(chuàng)建自動(dòng)化策略并將其推送到設(shè)備組。即使是Puppet和An
    發(fā)表于 02-04 15:55 ?1141次閱讀

    10個(gè)殺手級(jí)的Python自動(dòng)化腳本分享

    重復(fù)性任務(wù)總是耗時(shí)且無(wú)聊,想一想你想要一張一張地裁剪 100 張照片或 Fetch API、糾正拼寫和語(yǔ)法等工作,所有這些任務(wù)都很耗時(shí),為什么不自動(dòng)化它們呢?在今天的文章中,我將與你分享 10 個(gè) Python [自動(dòng)化腳本]。
    的頭像 發(fā)表于 01-06 15:34 ?700次閱讀

    分享10個(gè)實(shí)用的Python自動(dòng)化腳本

    重復(fù)性任務(wù)總是耗時(shí)且無(wú)聊,想一想你想要一張一張地裁剪 100 張照片或 Fetch API、糾正拼寫和語(yǔ)法等工作,所有這些任務(wù)都很耗時(shí),為什么不自動(dòng)化它們呢?在今天的文章中,我將與你分享 10 個(gè) Python 自動(dòng)化腳本
    的頭像 發(fā)表于 01-21 15:58 ?1286次閱讀

    使用Python腳本實(shí)現(xiàn)自動(dòng)化運(yùn)維任務(wù)

    許多運(yùn)維工程師會(huì)使用 Python 腳本來自動(dòng)化運(yùn)維任務(wù)。Python 是一種流行的編程語(yǔ)言,具有豐富的第三方庫(kù)和強(qiáng)大的自動(dòng)化能力,適用于許多不同的領(lǐng)域。
    的頭像 發(fā)表于 04-08 10:36 ?1582次閱讀

    智能辦公自動(dòng)化系統(tǒng)的創(chuàng)建

    電子發(fā)燒友網(wǎng)站提供《智能辦公自動(dòng)化系統(tǒng)的創(chuàng)建.zip》資料免費(fèi)下載
    發(fā)表于 06-25 15:35 ?0次下載
    智能辦公<b class='flag-5'>自動(dòng)化</b>系統(tǒng)的<b class='flag-5'>創(chuàng)建</b>

    modelsim自動(dòng)化仿真實(shí)驗(yàn) 利用腳本實(shí)現(xiàn)modelsim自動(dòng)化仿真

    ,然后編譯,再添加波形,這樣是非常麻煩的。在實(shí)際工作中一般不會(huì)這樣操作,通常我們都會(huì)利用腳本實(shí)現(xiàn)modelsim的“自動(dòng)化”編譯。實(shí)現(xiàn)一鍵完成電腦自動(dòng)打開modelsim軟件,自動(dòng)編譯
    的頭像 發(fā)表于 07-19 10:10 ?1533次閱讀
    modelsim<b class='flag-5'>自動(dòng)化</b>仿真實(shí)驗(yàn) 利用<b class='flag-5'>腳本</b>實(shí)現(xiàn)modelsim<b class='flag-5'>自動(dòng)化</b>仿真

    keil自動(dòng)化編譯腳本

    這是一個(gè) keil 的自動(dòng)化編譯腳本,可被其他腳本或程序調(diào)用,接收參數(shù)并按參數(shù)編譯 keil 工程,而不必打開 keil 軟件,實(shí)現(xiàn)程序上的自動(dòng)化。
    的頭像 發(fā)表于 10-16 17:04 ?1575次閱讀
    keil<b class='flag-5'>自動(dòng)化</b>編譯<b class='flag-5'>腳本</b>

    使用OpenSCAD腳本自動(dòng)化電容式觸摸傳感器PCB設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《使用OpenSCAD腳本自動(dòng)化電容式觸摸傳感器PCB設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:39 ?0次下載
    使用OpenSCAD<b class='flag-5'>腳本</b><b class='flag-5'>自動(dòng)化</b>電容式觸摸傳感器PCB設(shè)計(jì)