bash脚本:等待apache2优美停车



在ubuntu 12.04服务器上,我有一个bash脚本来优雅地停止我的apache2服务器,删除 /var/www的内容,解开新内容并再次开始apache。(一切都以root执行)

echo "Test";
cd /var;
service apache2 graceful-stop;
rm -R www/ && echo "Flush...";
unzip transfer.zip > /dev/null && echo "Flushed.";
service apache2 start;

我遇到的错误是apache再次启动时:

Test
Flush...  
Flushed.
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

所以脚本不等待Apache停止。

到目前为止我尝试过的东西:

我尝试使用wait(同一错误)

等待
service apache2 graceful-stop;  
wait $!;

我试图获得Apache的PID并等待此(相同错误)

pid=$(cat /var/run/apache2.pid)
apache2ctl graceful-stop;
wait $pid;

我尝试使用apache2ctl graceful-stop而不是service apache2 graceful-stop(相同错误)


我想念什么?当我使用service apache2 stop时,一切正常:

 * Stopping web server apache2                                                                                        
... waiting                                                                                                  [ OK ]
Flush...
Flushed.
 * Starting web server apache2                                                                                [ OK ]

谢谢

编辑

在这里,输出具有等待的退出代码:

 * Stopping web server apache2                                                                                [ OK ]
0
Flush...
Flushed.
 * Starting web server apache2                                                                                       
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                                                              [fail]

似乎Apache本身建议在重新启动之间等待几秒钟:http://wiki.apache.org/httpd/couldnotnotbindtoaddress

实际上,释放和结合到端口不是立即的相对普遍。内核可能需要一些时间(最多几分钟)才能释放封闭的插座。它称为流连忘返的时间。一些Apache文档也简要讨论了,请参见http://httpd.apache.org/docs/2.2/misc/perf-tuning.html搜索"闲置关闭"。

关于此问题的问题有一个非常详细的答案:套接字选项so_reuseaddr和so_reuseport,它们有何不同?它们的意思是在所有主要操作系统中相同吗?

相关内容

  • 没有找到相关文章

最新更新