私は最近非常に小さな会社で働き始め、「Dmarc」または家庭用WiFiルーターとして使用するために各顧客の自宅に配置するMikrotikルーターの在庫処理プロセスを自動化して時間を節約しようとしています。ルーターは一度に5箱(箱あたり20個)で注文されます。最初はデフォルト設定が最適ではなく、ファームウェアが古くなっていました。私がそこに到着する前に、会社は1日に数時間ごとに各ルーターにログインし、デフォルト設定を削除し、会社に適した設定に交換し、ファームウェアを更新し、デバイスを棚に追加しました。リスト。私はルータの配置(現在は一度に6つを実行できます)にログインし、これらのタスクを実行するために次のスクリプトを作成しました。電子メールで在庫に追加する前に、「在庫テーブル」に20行が含まれるのを待つifループを追加する必要があります。スクリプトは現在16分ごとに実行されます...コード:
#!/bin/bash
while true
do
echo $(date "+%F %T") : starting script >> Script_timer.log
#Scans for new Mikrotiks to configure on the office LAN
mactelnet -lB > targetsfull.inv &
# Gets PID of scanning activity
PID=$!
#wait 5 seconds
sleep 5
#end scan
kill $PID
#Grab MAC addresses from scan info into file called targetsMAC.inv
grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' targetsfull.inv > targetsMAC.inv
#Run Expect Script on every MAC address in targetsMAC.inv and adds them to CompleteRouters.inv ( Records Serial Number and MAC address of eth1 for each router and replaces factory config with company default config
/home/michael/hAPRtRMAC.sh
#Formats list of serial numbers and MAC addresses into 2 columns "serialnumber,MACaddress"
xargs -n2 < CompleteRouters.inv >> InventoryConfigsComplete.inv
#places a comma between the serial number and MAC address
sed -i "s/ /,/g" InventoryConfigsComplete.inv
#removes Duplicate Lines and saves to new file
awk '!seen[$0]++' InventoryConfigsComplete.inv > InventoryConfigsEmail.inv
Kamarajの答えは接続だけでうまくいきます。
FILE_NAME=InventoryConfigsEmail.inv
NUM_OF_LINES=$(wc -l < ${FILE_NAME})
if [ "${NUM_OF_LINES}" -ge "20" ]
then
echo "Triggering Inventory Complete Email"
mail -s "Inventory Configs Complete" [email protected] < "${FILE_NAME}"
mv *.inv safezone/
touch CompleteRouters.inv
touch InventoryConfigsComplete.inv
touch InventoryConfigsEmail.inv
else
echo "${NUM_OF_LINES} Routers Complete" >> ChangeTheBatch.inv
fi
echo $(date "+%F %T") :script ended >> Script_timer.log
sleep 960
done
ベストアンサー1
このスクリプトは/tmp/my.logの行番号をチェックし、20以上の場合はEメールを送信します。
#!/bin/bash
FILE_NAME=/tmp/my.log
NUM_OF_LINES=$(wc -l < ${FILE_NAME})
if [ "${NUM_OF_LINES}" -ge "20" ]
then
echo "Triggering Email"
mail -s "Log" [email protected] < "${FILE_NAME}"
else
echo "Log file contains ${NUM_OF_LINES} lines"
fi