答案1
获得地址已被使用错误:
另一台服务器使用该 IP:端口
在这种情况下,您尝试启动两个服务,并且它们都需要相同的地址和端口组合,这是不可能的。只有一个服务可以侦听一个特定端口。显然,您不处于这种情况。
同一台服务器重启得太快
默认情况下,内核会保留 IP:port 组合几秒钟(可能是一分钟),然后才允许服务再次使用这些组合。这是为了确保所有客户端都有机会收到正确的关闭信号。此外,出于安全原因,您最终可能会收到预期发送到旧连接的数据包。这可能会导致问题。
看起来您的情况就是这样,尽管我认为 Apache 会自动使用该
SO_REUSEADDR
标志。解决此问题的方法是查看重新启动的实现,并在关机和启动命令之间添加一个 sleep。如果您使用 init 脚本,这非常简单:[...snip...] ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" do_stop stop case "$?" in 0|1) sleep 12 # <<-- sleep before restarting do_start case "$?" in [...snip...]
使用 systemd,您必须在启动 apache2 服务器之前编辑 .service 文件并添加 sleep。
ExecStart=sleep 20 && /usr/sbin/apache2
您的初始化顺序也可能是导致问题的原因(如果您必须启动,请更改某些内容,然后在启动时重新启动 apache2;话虽如此,能够在任何时间点重新启动 apache2 可能很重要)。