带有日志的原始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 -
我的问题:
为什么即使端口tcp / 80正在侦听,有时仍无法访问Web服务器?
如何在日志中排除我自己的卷曲流量?
是否有更好的方法来用日志制作持久化Python2 Web服务器?