記事ディレクトリ
1. ファイル内に特定の文字列が存在するかどうかを確認し、存在しない場合は追加します。
#!/usr/bin/env bash
strs=( "username soft nproc 65535" "username hard nproc 65535" )
file="/etc/security/limits.conf"
# 当数组中有空格时,数组引用需要用双引号包住
for str in "${strs[@]}"
do
# 判断 所需的字符串 是否在文件中存在如果存在则不进行操作
is_exist=$(cat "${file}"|grep "${str}")
if [ "${is_exist}"x == "x" ]; then
echo "Ready to write ${str} to ${file}"
echo "${str}" >> ${
file}
if [ $? == 0 ]; then
echo "Write successfully"
else
echo "Write failure!"
fi
else
echo "The ${str} already exists in the ${file}"
fi
done
2. これらのポートが特定のマシンで占有されているかどうかを確認します。
#!/usr/bin/env bash
ports=( 8030 9020 9030 9010 9060 8040 9050 8060 8000 )
for num in ${
ports[@]}
do
netstat -tunlp |grep $num
done
t:TCP伝送プロトコルの接続状態を表示
u:UDP伝送プロトコルの接続状態を表示します。
n: IP とポートをドメイン名ではなくプログラム アドレスとして表示します。
l: リッスンしているソケットを表示します。
p: pid とプログラム名を表示します。
現在リッスンしている (TCP、UDP トランスポート プロトコル) プログラムを検索し、アドレス、pid、プログラム名 (ip+port の形式) を表示します。
3. lib ディレクトリ (jar を含む) にクラスが存在するかどうかを確認します。
#!/usr/bin/env bash
ls /${
hive_home}/lib | while read one_line
do
class_name=$(jar -vtf $one_line |grep CustomInDBAuthenticationProviderImpl)
if [[ ${
class_name}x != "x" ]]; then
echo "jar:$one_line contains the ${class_name}"
fi
done
v: 詳細な出力、つまりクラスの完全修飾名
t: どのクラスが含まれているか、どのファイルなど、jar の内容を表示します。
f: jar パッケージのファイル名を指定する必要があります。
4. 前のコマンドの実行成功が後続のコマンドの実行に影響を及ぼす場合
前のコマンドが正常に実行されたかどうかを確認します。正常に実行されなかった場合、次のロジックは確実に正常に実行されません。
。。。
exit_code=$?
if [ $exit_code -ne 0 ];then
exit $exit_code
fi
if [ "${20}" ]; then
echo "starting to load data to mysql using mysql load"
bash $F_HOME/bin/load_function.sh "${20}"
fi
5. yaml ファイルの値を取得する
#!/usr/bin/env bash
declare -A config_map
while read line
do
#行为空时跳过这行
if [ ! "${line}" ]; then
continue
fi
conf_name=$(echo ${
line} | cut -d : -f 1 | sed 's/ //g' )
conf_value=$(echo ${
line} | cut -d : -f 2 | sed 's/ //g' )
# 如果值为空则设置默认值:bigdata
config_map[${
conf_name}]=${
conf_value:-bigdata}
echo "get config_map [ ${conf_name} : ${config_map[${conf_name}]} ]"
done < bigdata_conf.yaml
bigdata_conf.yaml ファイル
zookeeper:
zookeeper1: node1
zookeeper2: node2
zookeeper3: node3
hdfs:
namenode1: node1
namenode2: node2
journalnode1: node1
journalnode2: node2
journalnode3: node3
# gao
yarn:
resourcemanager1: node1
resourcemanager2: node2
jobhistorynode: node3
出力
。。。
get config_map [ zookeeper : bigdata ]
get config_map [ zookeeper1 : node1 ]
get config_map [ zookeeper2 : node2 ]
get config_map [ zookeeper3 : node3 ]
。。。
6. シェル再試行スクリプト
#!/bin/sh
#记录重试次数
count=0
# 重试标识,flag=0 表示任务正常,flag=1 表示需要进行重试
flag=0
while [ 0 -eq 0 ]
do
echo ".................. job begin ..................."
# ...... 添加要执行的内容,flag 的值在这个逻辑中更改为1,或者不变......
sleep 10
port_cnt=`netstat -anp | grep 9083 | grep LISTEN | wc -l`
thread_cnt=`ps -ef | grep -v "grep " | grep "org.apache.hadoop.hive.metastore.HiveMetaStore" -c`
if [[ $port_cnt -lt 1 || $thread_cnt -lt 1 ]];then
flag=1
else
flag=0
fi
# 检查和重试过程
if [ flag -eq 0 ]; then #执行成功,不重试
echo "--------------- job complete ---------------"
break;
else #执行失败,重试
count=$[${
count}+1]
if [ ${
count} -eq 3 ]; then #指定重试次数,重试超过4次即失败
echo 'timeout,exit.'
break
fi
echo "...............retry in 1 seconds .........."
sleep 1
fi
done