Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本,用于在kubernetes的day basics中查找新添加的播客_Linux_Bash_Shell_Unix_Kubernetes - Fatal编程技术网

Linux Shell脚本,用于在kubernetes的day basics中查找新添加的播客

Linux Shell脚本,用于在kubernetes的day basics中查找新添加的播客,linux,bash,shell,unix,kubernetes,Linux,Bash,Shell,Unix,Kubernetes,我需要一个shell脚本来查找哪些kubernetes吊舱是新添加到集群的。包括pod名称、日期和时间以及名称空间 我已尝试使用以下bash脚本: #!/bin/bash p=50 #total pods count pcount=`kubectl get pods |wc -l` ###Addition check if [ $ncount -gt $n ] then ####pods variable have all pods name. po

我需要一个shell脚本来查找哪些kubernetes吊舱是新添加到集群的。包括pod名称、日期和时间以及名称空间

我已尝试使用以下bash脚本:

#!/bin/bash

p=50            #total pods count

pcount=`kubectl get pods |wc -l`

###Addition check
if [ $ncount -gt $n ]
then

    ####pods variable have all pods name.
    pods=`kubectl get pods|awk '{print $1}'|awk '{if(NR>1)print}'| xargs`

    ###start variable have all dates pods created

    start=`kubectl describe pod $pods |grep "Start Time"|awk '{print $3 $4 $5 $6}'`

    ###max variable have total number of pods
    max=`kubectl get pods |awk '{if(NR>1)print}'| wc -l`

    dt=`date +%a,%d%b%Y`

    array=( $start )

    i=0
    while [  $i -lt $max ];
    do
        #    echo "inside loop ${array[$i]}"

        if [[ "$dt" == "${array[$i]}" ]];then
             dat=`date "+%a, %d %b %Y"`
             name=`kubectl describe pod $pods |grep -v SecretName: |echo "$dat" |egrep 'Name|Start Time'`

             printf "\n"
             echo "Newly Added pods are: $name"
        fi
        i=$(( $i + 1 ))
    done
fi
剧本几乎很好地发挥了作用。但我只需要今天创建的pod,脚本显示所有pod的名称、开始时间和名称空间


请提供帮助。

您的脚本存在许多问题和低效。应该避免反复调用像
kubectl
这样的有点重的命令;尝试重新安排事情,以便只运行一次,并从中提取所需信息。我模模糊糊地猜测你实际上想要的是类似于

#!/bin/bash

# Store pod names in an array  
pods=($(kubectl get pods |
    awk 'NR>1 { printf sep $1; sep=" "}'))
if [ ${#pods[@]} -gt $n ]; then  # $n is still undefined!
    for pod in "${pods[@]}"; do
        kubectl describe pod "$pod" |
        awk -v dt="$(date +"%a, %d %b %Y")" '
            /SecretName:/ { next }
            /Name:/ { name=$NF }
            /Start Time:/ { t=$3 $4 $5 $6;
                if (t==dt) print name
                name="" }'
    done
fi
不管怎样,一旦运行了Awk,就应该尽可能多地将处理重构为Awk;它可以做任何事情
grep
cut
sed
可以做的事情,还有更多。还要注意,我们如何优先使用
$(command)
命令替换语法,而不是过时的遗留
`command`
语法


使用
-o=json
kubectl
可能会更容易、更直接地以编程方式进行处理,因此您应该认真研究这一点。我没有Kubernetes集群可供使用,因此我只是指出这是进一步改进的方向。

这里有一些明显的错误,比如
grep | echo
没有任何用处。也许可以尝试至少对其中的一些进行分类。请您的问题显示示例输出,这样我们就可以计算出您希望从何处提取日期以及它的外观。输出如下:新添加的pod是:`Name:nginx-58432966c-ssjqx名称空间:steven_lung开始时间:Sat,2018年6月16日05:11:27+0000`不,我是说
kubectl
的原始输出在这种情况下是什么样子的?请用这个细节来回答你的问题——就像你刚刚发现的,在评论中提供这个是行不通的(而且你的问题应该是独立的)。问题已经解决了。更改代码如下:if[“$dt”==“${array[$i]}”];然后dat=
date“+%a,%d%b%Y”
name=
kubectl描述pod$pods | grep-v SecretName:| grep-b1'$dat'
kubectl描述pod$pods | grep-v SecretName:| grep-E”name:|开始时间:“>pod.txt | cat pod.txt | cat pod.txt | grep-b1$dat”>pod1.fi i=($i+1))我很乐意承认,我不得不猜测脚本应该做什么,以及
kubectl
的输出应该是什么样子。如果没有其他问题,这至少可以引导你简化你的脚本,也许在将来提出更好的问题。您可以修复以下问题吗:第5行:意外标记附近的语法错误
|“第5行:
pods=(kubectl get pods |”第6行:意外标记附近的语法错误
)“第6行:
awk'NR>1{printf sep$1;sep=”“}”)抱歉输入太草率;现在试试。就像我之前写的那样,我无法访问
kubectl
,因此无法测试此代码。