在bash中过快地防止请求

时间:2016-01-31 10:05:48

标签: bash ssh docker sleep

我必须在bash脚本中启用,启动,停止和重启docker。 问题是命令是用ssh连接执行的。因此在执行命令后,ssh-connection关闭。所以没有足够的时间来启动和停止docker。我收到这个错误:

  对于docker.service

启动请求重复得太快

我该怎样防止这种情况? 是否可以在同一命令中执行sleep

 ${SSHKEY}$i sudo systemctl start docker
 ${SSHKEY}$i sleep 4

以上操作无效,因为连接已关闭。 我试过了:

${SSHKEY}$i sudo systemctl start docker; sleep 1

但似乎没有效果,因为连接在第一个命令后立即关闭。

2 个答案:

答案 0 :(得分:1)

阅读文档和手册页。 Systemd非常简洁:systemd.service

  

StartLimitInterval = StartLimitBurst =

     

配置服务启动速率限制。默认情况下,在10秒间隔结束之前,不允许在10秒内启动超过5次的服务再次启动。通过这两个选项,可以修改此速率限制。使用StartLimitInterval =配置检查间隔(在Manager配置文件中默认为DefaultStartLimitInterval =,设置为0以禁用任何类型的速率限制)。使用StartLimitBurst =配置允许每个时间间隔的启动次数(默认为管理器配置文件中的DefaultStartLimitBurst =)。这些配置选项与Restart =一起使用时特别有用;但是,它们适用于所有类型的启动(包括手动),而不仅仅是由Restart =逻辑触发的启动。请注意,不再尝试重新启动为Restart =配置且达到启动限制的单元;但是,它们可能仍会在以后手动重新启动,此时再次激活重启逻辑。请注意,systemctl reset-failed将导致刷新服务的重启率计数器,这在管理员想要手动启动服务并且启动限制干扰该服务时非常有用。

     

<强> StartLimitAction =

     

配置在命中使用StartLimitInterval =和StartLimitBurst =配置的速率限制时要执行的操作。采取none,reboot,reboot-force,reboot-immediate,poweroff,poweroff-force或poweroff-immediate之一。如果没有设置,除了不允许启动之外,达到速率限制将不会触发任何操作。在正常关闭过程之后重启会导致重启(即等同于systemctl reboot)。 reboot-force导致强制重启,强制终止所有进程,但是在重启时不会导致脏文件系统(即相当于systemctl reboot -f),reboot-immediate导致立即执行reboot(2)系统调用,这可能导致在数据丢失。类似地,poweroff,poweroff-force,poweroff-immediate具有以类似语义关闭系统的效果。默认为无。

基本上,您需要设置这些选项以满足您在docker服务文件中的需求,或者在/etc/systemd/system.conf中全局设置这些选项,例如DefaultStartLimitBurst=100

答案 1 :(得分:0)

首先只执行一个命令。尝试

sudo whoami; whoami

你想要2个睡眠命令吗?

echo "whoami; sleep 3; whoami"  > restartDocker
chmod 777 restartDocker
sudo ${PWD}/restartDocker