如何使用日志制作持久的Python2 Web服务器?

时间:2019-01-15 10:23:22

标签: linux python-2.7 shell

带有日志的原始Python2 Web服务器是从此答案中获取的。 Save logs - SimpleHTTPServer

user@linux:~$ cat ~/webserver.py
import SimpleHTTPServer, SocketServer, sys

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", 80), Handler)

print "serving at port", 80

sys.stderr = open('/home/user/log.txt', 'w', 1)
httpd.serve_forever()
user@linux:~$ 

为确保服务器持续运行,我添加了以下cron作业,每分钟检查一次Web服务器状态。 如果端口tcp / 80不再侦听,则脚本将重新启动它。

user@linux:~$ crontab -l
*/1 * * * * ~/cron.sh 2>&1 > /dev/null
user@linux:~$ 

user@linux:~$ cat ~/cron.sh
#!/bin/bash
netstat -pl | grep ":80 " 2>&1 > /dev/null
if [ $? -ne 0 ]
then   
        python ~/webserver.py
fi
user@linux:~$ 

不幸的是,netstat -pl | grep ":80 "存在一个小问题 这似乎不可靠。 有时,即使端口tcp / 80正在监听,我也无法访问Web服务器。 (我不知道为什么)

因此,bash脚本不会重新启动Python网络服务器,因为$?总是返回0,因为tcp / 80正在侦听(即使我无法再访问它)。

我什至用curl localhost:80 -v进行了测试,但仍然没有得到任何回应。

解决方法是将netstat -pl | grep ":80 "替换为curl localhost:80,并且Web服务器运行良好。

我已经通过终止webserver.py进程对此进行了测试,一分钟后,该服务会按预期自动重新启动。

此方法的问题是我的log.txt充满了我自己的卷曲日志

127.0.0.1 - - [10/Jan/2019 00:00:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2019 00:01:01] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2019 00:02:02] "GET / HTTP/1.1" 200 -

我的问题:

  1. 为什么即使端口tcp / 80正在侦听,有时仍无法访问Web服务器?

  2. 如何在日志中排除我自己的卷曲流量?

  3. 是否有更好的方法来用日志制作持久化Python2 Web服务器?

0 个答案:

没有答案