我必须在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
但似乎没有效果,因为连接在第一个命令后立即关闭。
答案 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