难以使flup fcgi脚本正常工作

1 投票
1 回答
4255 浏览
提问于 2025-04-15 17:42

我正在为一个客户搭建一个网站,使用的是django。这个网站托管在共享主机上,不能使用mod_wsgi。去年我用fcgi让它正常运行,但这次回来后,它坏掉了。

我把fcgi脚本换成了一个简单的hello world脚本:

#!/usr/bin/python
def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!\n']

try:
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()
except:
    import sys, traceback
    traceback.print_exc(file=open("errlog.txt","a"))

在我的本地服务器上测试过,运行正常,但在托管的服务器上,我遇到了这个错误:

<title>FCGI Error</title>
A timeout occured while waiting for the script output (in: /usr/www/users/mymemb/).

查看错误日志时,我发现了这些信息:

[Wed Jan  6 16:59:37 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 10 seconds

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 10 seconds

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" (user mymemb, gid 100) restarted (pid 1057)

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" (pid 1057) terminated by calling exit with status '118'

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 10 seconds

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 10 seconds

[Wed Jan  6 16:59:38 2010] [warn] FastCGI: (dynamic) server "/usr/www/users/mymemb/mymembers.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 10 seconds

etc ...

如果我通过ssh连接到服务器,可以正常运行这个脚本,输出如下:

mymemb@www81:~/public_html$ ./mymembers.fcgi 
WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/plain
Content-Length: 13

Hello World!

我该怎么解决这个问题呢?

补充信息:

看起来这个脚本根本没有运行。如果我在脚本顶部加上import x,然后通过ssh运行,发现x.pyc文件被创建了。如果我删除x.pyc,然后访问网站,x.pyc就不会被创建。

我还注意到错误信息从

terminated by calling exit with status '118'

变成了

terminated by calling exit with status '116'

我希望能找到这些退出状态的参考资料。

1 个回答

2

退出状态码116和118是来自suexec的。通过查看源代码,我发现这些错误是因为文件或文件夹的权限设置得不对,允许了组用户或其他用户写入,这让suexec觉得有安全隐患。把组用户的写权限去掉后,问题就解决了。

撰写回答