我正在尝试创建一个命令,以显示Nomad群集中所有正在运行的分配的日志。我可以使用此命令获取分配ID:
curl -s $NOMAD_ADDR/v1/allocations | jq -r '.[] | select(.JobID=="MY_JOB_NAME") | "\(.ID)"'
从那里我想为每个分配运行multitail nomad logs <allocation> -tail -f
,以便我可以一次查看所有日志。多尾调用的语法如下所示:
multitail [options] -l "shell 1 command" -l "shell 2 command" -l...
如果你打开5个shell,那么你需要5个-l
个参数。
我在xargs
手册中没有看到此功能,但我需要xargs multitail --arg-for-each "-l my shell command {}"
之类的内容。是否可以使用xargs以这种方式构造具有可变数量参数的命令?如果没有,我可以使用任何替代方案吗?
答案 0 :(得分:2)
您的输入是ID列表。出于这个答案的目的,让我们说看起来像:
foo
bar
baz
您想将其转换为:
multitail \
-l "nomad logs foo -tail -f" \
-l "nomad logs bar -tail -f" \
-l "nomad logs baz -tail -f"
也许这样的事情会起作用:
eval multitail $(command_that_generates_ids | xargs -IID echo "-l 'nomad logs ID -tail -f'")