日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 脚本 wait,shell脚本使用 timeout + wait 完成: 超时退出执行,等待执行完毕并处理执行结果 - yanbin's Blog...

發(fā)布時間:2024/3/12 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 脚本 wait,shell脚本使用 timeout + wait 完成: 超时退出执行,等待执行完毕并处理执行结果 - yanbin's Blog... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

具體需求是:

1.從文件中讀取 seq, 使用 pub 程序?qū)?seq 推送給定閱讀了 cmd topic 的 peer client.

client 將處理結(jié)果(message)推送到 cmdresp topic. 這個過程是經(jīng)過 server 的,可以不考慮。

pub 成功后記錄 seq.

2. sub 程序訂閱 cmdresp topic, 簡單處理接收到的消息,并且記錄到文件。

3. 對比 pub 成功的 seq 記錄與接收到的 message, 獲得一個 pub/sub 成功率。

問題是:

1. pub 和 sub 分別使用兩個不同的管道,pub cmd 成功后并不等待 cmdresp.

甚至可以說: pub 程序并不知道 cmdresp 的存在,甚至不知道 sub 的存在.

2. sub 是阻塞的:沒有任何消息也不退出。

3. pub message 到 peer client 到 cmdresp 返回之間的時間是不確定的。

消息在兩個管道都有可能出現(xiàn)延遲。

4. sub 程序本身沒有超時退出選項。

偽代碼是:

timeout time sub cmdresp_topic > cmdresp_record

while seq in read seqs:

seq = parse_seq(seq)

message = create_message(seq)

pub cmd_topic message

record(message, msg_record)

// do something, maybe sleep 1s

wait sub

parse(cmdresp_record, msg_record)

shell 代碼是:

tmp_file="$(mktemp)

rm -f $tmp_file

mkfifo $tmp_file

# terminate $MOSQUITTO while $TIMEOUT period

timeout $TIMEOUT \

$MOSQUITTO_SUB -t $topic_resp --cafile $CA --cert $CERT --key $KEY > $tmp_file &

cat $tmp_file | cut -d',' -f1 | cut -d':' -f2 | sed -n 's/\"//gp' >> $SUB_LOG &

N=0

for line in $(cat $SNS_FILE)

do

sn="$(echo "$line" | cut -d'&' -f1)"

seq="$($LOOKUP_TOPIC $sn)"

name="$(printf "%s%.4d" $sn $seq)"

topic="router/$name/cmd"

N=$((N+1))

mid="$(date +%Y%m%d%H%M%S)-$N"

message=makemsg $mid

$MOSQUITTO_PUB -t $topic --cafile $CA --cert $CERT --key $KEY -m "$message"

sw="$(echo "$line" | cut -d'&' -f2)"

record="$(date +%Y%m%d:%H),$sn,$sw,1"

[ $? -eq 0 ] && echo "$record" >> $PUB_LOG

[ $((N % 10)) -eq 0 ] && sleep $SLEEP_TIME

done

wait # wait $MOSQUITTO_SUB and cat $tmpfile terminaation

rm -f $tmp_file

if [ -f $SUB_LOG -a -f $PUB_LOG ]; then

tmp_file="$(mktemp -p $RECORD_DIR)"

for line in $(cat $SUB_LOG)

do

sed "s/\(.*$line.*\),1/\1,0/g" $PUB_LOG > $tmp_file

cp $tmp_file $PUB_LOG

done

rm -f $tmp_file

fi

總結(jié)

以上是生活随笔為你收集整理的linux 脚本 wait,shell脚本使用 timeout + wait 完成: 超时退出执行,等待执行完毕并处理执行结果 - yanbin's Blog...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。