文件 st.txt:
"succeeded" "test" "2018-03-30T13:42:12Z" "2018-03-30T13:42:21Z"
我有一个返回最新 Rundeckjob 状态的脚本
curl -s -H "Accept: application/json" -X GET "http://localhost:4440/api/20/project/Windows-AD/executions?authtoken=r50onM4kXzZ7DhhAN6Fe2rwwxuAhF0IG" | python -m json.tool > 1.json
jq -r '.|[.executions[] | select(.job.name != null)] | sort_by(.id) | reverse | .[0] | [.status, .job.name, ."date-started".date, ."date-ended".date] | @csv' 1.json > 1.csv
sed 's/,/ /g' 1.csv>st.txt
while read status name startdate enddate; do
case "$status" in
"\"aborted\"")
echo -1
;;
"\"failed\"")
echo -1 + $name
;;
"\"succeeded\"")
echo 0
;;
*) echo 0 + $name
esac
exit 0
done<st.txt
如何比较 $start 和 $enddate (" 2018-03-30T13:42:12Z" "2018-03-30T13:42:21Z"
),如果差异大于 5 分钟,则添加另一个退出“花费太长时间”
答案1
您可以像这样转换和比较开始/结束日期:
startdate=${startdate//\"/}
stime=$(date -d "${startdate/T/ }" +%s)
enddate=${enddate//\"/}
etime=$(date -d "${enddate/T/ }" +%s)
let elapsed=etime-stime
[ $elapsed -gt 300 ] && echo "taking too long"
答案2
GNU date 可以直接进行数学计算(以秒为单位)。
POSIX 脚本。
#!/bin/sh
sd='"2018-03-30T13:42:12Z"'
ed='"2018-03-30T13:42:21Z"'
sd=${sd#\"}; sd=${sd%\"} # Remove double quotes.
ed=${ed#\"}; ed=${ed%\"}
ep=$(date -d @0) # Epoch date (anchor).
ss=$(date -d "$sd" +%s) # Start time.
es=$(date -d "$ed" +%s) # End time.
elapsed=$(date -d "$ep - ${ss}sec + ${es}sec" +%s)
if [ "$elapsed" -gt 300 ]]; then
echo "taking too long"
fi