1. 程式人生 > 其它 >【小技巧】Shell批量處理報錯資訊,檢測本地jar包是否存在

【小技巧】Shell批量處理報錯資訊,檢測本地jar包是否存在

技術標籤:linux運維shell

【小技巧】Shell批量處理報錯資訊,檢測本地jar包是否存在

最近在搭建LLAP時,遇到一些問題,直接丟擲一堆錯誤,提示Jar不存在。

Caused by: java.io.FileNotFoundException: File /opt/app/hadoop-2.7.7/share/hadoop/common/hadoop-lzo-0.4.20.jar:/opt/app/apache-tez-0.9.1-bin/hadoop-shim-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/hadoop-shim-2.7-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-api-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-common-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-dag-0.9.1.jar does not exist

丟擲了一堆使用冒號分割的jar包字串。當然實際報錯的jar包數量更多,這裡截取了一部分。

雖然後來發現問題不是jar包缺失,而且配置問題。但當時拿到這個錯誤時,第一反應是這些jar缺失了,手動去目錄中進行核對排查。

排查了一個之後,發現jar包存在。可能是其中的某個jar出現了缺失。

但全部手動排查,工作量太大。於是想到了使用指令碼批量排查。

指令碼的製作思路,就是先將這一大段jar包字串作為引數傳遞進去,然後shell按照冒號" : "進行分割,然後對每個jar使用ls進行檢視,如果缺失,則輸出提示。

於是,最終shell指令碼編寫如下:

#! /bin/bash

 content=
$1 #遍歷字串 OLD_IFS="$IFS" #儲存舊的分隔符 IFS=":" nodes=($content) IFS="$OLD_IFS" # 將IFS恢復成原來的 for i in "${!nodes[@]}"; do info=`ls ${nodes[i]}` if [ -z "$info" ]; then echo "${nodes[i]}" fi done

這裡主要涉及到對字串的切分,儲存為陣列後,再對資料進行遍歷。如果遇到不存在的jar包,則將jar字串資訊輸出。

後話

如果有幫助的,記得點贊、關注。在公眾號《數舟》中,可以免費獲取專欄《資料倉庫》配套的視訊課程、大資料叢集自動安裝指令碼,並獲取進群交流的途徑。

我所有的大資料技術內容也會優先發布到公眾號中。如果對某些大資料技術有興趣,但沒有充足的時間,在群裡提出,我為大家安排分享。

公眾號自取:

公眾號