【问题标题】:Running command in loop for n times inside kubernetes pods container在 kubernetes pods 容器中循环运行命令 n 次
【发布时间】:2019-05-22 22:41:13
【问题描述】:

基本上,我需要澄清这是否是正确的做法:我能够在 k8s pod 上的容器内运行 sed 命令。现在,同一个 sed 我想循环 10 次,但不确定这是否有效,尽管我没有从 kubernetes pod 或日志中得到错误。请确认我的循环是否良好。

'sed -i "s/\(training:\).*/\1 12/" ghav/default_sql.spec.txt &&
         lant estimate -e dlav/lat/experiment_specs/default_sql.spec.txt -r /out'

我想在同一个容器中执行此工作命令 10 次。下面是对的吗?

'for run in $(seq 1 10); do sed -i "s/\(training:\).*/\1 12/" ghav/default_sql.spec.txt &&
         lant estimate -e dlav/lat/experiment_specs/default_sql.spec.txt -r /out; done' 

pod 已创建并且运行良好,但我不确定如何确认我的循环是否良好,并且正在执行 10 次...

里面的 pod describe 我在下面看到

Args:
  sh
  -c
  'for run in $(seq 1 10); do sed -i "s/\(training:\).*/\1 12/" ghav/default_sql.spec.txt &&
         lant estimate -e dlav/lat/experiment_specs/default_sql.spec.txt -r /out; done'

【问题讨论】:

  • sh -c更改为sh -x -c(或在for之前添加set -x;)并观察命令的stderr输出 - 您将看到所有执行的命令,因此您可以确认它执行 n 次。
  • 我更新了适用于 sh 的 for 循环。那么,我不需要在命令周围使用单引号吗?

标签: bash docker sed kubernetes kubernetes-pod


【解决方案1】:

Define a Command and Arguments for a Container”确实提到:

要查看在容器中运行的命令的输出,请查看 Pod 中的日志:

kubectl logs command-demo

因此,请确保您的测试命令确实回显某些内容,并检查 pod 日志。

sh -c 'for run in $(seq 1 10); do echo "$run"; done'

如:

command: ["/bin/sh"]
args: ["-c", "for run in $(seq 1 10); do echo \"$run\"; done"]

(此处使用seq,如kubernetes issue 56631中所述)

对于任何复杂的命令序列,混合引号,最好将该序列包装在一个脚本文件中,并调用该可执行文件 10 块。 日志将确认循环执行了 10 次。

【讨论】:

  • 你能解释一下args中的“或”吗?另外,我的语法看起来不错吗? args: ["-c", "or run in $(seq 1 10); do sed -i "s/(training_epochs:).*/\1 12/" dav/lanenet/t_specs/default_sql.spec.txt && lanet 估计 -e dv/lanenet/t_specs/default_sql.spec.txt -r /out; done"]
  • 这是一个错字。为,不或。复制粘贴出错了。
  • 在这个 docker 上下文之外尝试你的 sed 表达式,以确保它确实有效。然后在这里应用iit。
猜你喜欢
  • 2015-05-15
  • 2023-03-03
  • 2021-07-10
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多