我想暂停一下(也许只是sleep
?),因为在这个服务器上有很多容器,让它减慢重新启动的速度将意味着减少负载峰值。如果可能的话,我希望将它保留为一个行程序,我知道如何把sleep
放到bash脚本的for循环中,但我不知道如何把它放到这个文件中。$()
部分叫什么?
docker restart $(docker ps --format "{{.Names}}" | grep -v somename)
因此,我只想列出正在运行的容器,并重新启动每个容器,每次重新启动之间可能有30秒的停顿。
1条答案
按热度按时间pgpifvop1#
根据here,
$()
的含义为:语法是令牌级的,因此美元符号的含义取决于它所在的令牌。表达式$(command)是
command
的现代同义词,它代表命令替换;意思是,运行命令并把它输出放在这里要在暂停后执行所有重新启动,您需要在
$(docker ps --format "{{.Names}}" | grep -v somename)"
命令中的行上执行一个循环,在循环内执行docker restart $line
命令,然后执行sleep 30
命令(持续30秒)。大概是这样的:
说明:
这一行设置一个名为
items
的字符串变量,它包含所有用空格分隔的容器名称,就像您在原始命令中所做的那样。会自动以空格分隔字串,在
for
循环的每次反覆运算中提供不同的容器名称。介于
和
我们有一段代码,它对
items
字符串中的每个单词执行,如下所示我们像您一样重新启动Docker容器,但仅针对其中一个容器,其名称从
$word
读取。我们休眠30秒,然后再次迭代下一个
$word
值。单线版本
如果您需要一个可以作为单行运行的精简版本,可以执行以下操作: