我想在每个sleep
之间的这条衬垫中暂停一下(也许只是restart
?),因为此服务器上有很多容器,并且让它减慢了重启速度将意味着更少的负载峰值。如果可能的话,我希望将其保留为一个衬里,并避免将其放入bash shell脚本文件中。我知道如何将sleep
放入bash脚本的for循环中,但是我不知道如何将其放入其中。 $()
部分叫什么?
docker restart $(docker ps --format "{{.Names}}" | grep -v somename)
所以我只想列出一个正在运行的容器,然后重新启动每个容器,每次重新启动之间可能要暂停30秒。
答案 0 :(得分:1)
overload of CreateInstance
中$()
的含义是:
语法是令牌级别的,因此美元符号的含义取决于其所在的令牌。表达式$(command)是
command
的现代同义词,表示命令替换;这意味着运行命令并将其输出放在此处。
要执行所有重新启动然后暂停的操作,就是在$(docker ps --format "{{.Names}}" | grep -v somename)"
命令中的各行上循环,然后在循环内先执行docker restart $line
然后执行sleep 30
(持续30秒)命令。
类似这样的东西:
items=$(docker ps --format "{{.Names}}" | grep -v somename)
for word in items
do
docker restart $word
sleep 30
done
items=$(docker ps --format "{{.Names}}" | grep -v somename)
此行设置了一个名为items
的字符串变量,该字符串变量包含所有用空格分隔的容器的名称,就像您在原始命令中所做的一样。
for word in items
自动用空格分隔字符串,从而在for
循环的每次迭代中为您提供不同的容器名称。
之间
do
和
done
我们拥有用items
字符串中的每个单词执行的代码,如下所示
docker restart $world
我们像您一样重新启动docker容器,但仅对于其中一个容器,其名称从$word
中读取。
sleep 30
我们睡眠30秒钟,然后再次迭代下一个$word
值。
如果您想要可以作为一行运行的紧凑版本,则可以执行以下操作:
items=$(docker ps --format "{{.Names}}" | grep -v somename);for word in items; do; docker restart $word; sleep 30; done;