web.py搭配lighttpd启动报错:Connection refused,child exited:1 求助
解决web.py + lighttpd init启动报错(手动启动正常)的问题
针对你遇到的用/etc/init.d/lighttpd start启动时出现fastcgi socket连接拒绝,但手动执行lighttpd -D -f /etc/lighttpd/lighttpd.conf能正常运行的问题,以下是几个排查和解决方向:
1. 补全Python绝对路径,规避环境变量差异
init脚本启动的lighttpd运行在系统默认环境,可能无法识别你当前用户环境里的Python路径。修改lighttpd的fastcgi配置,把bin-path从直接指向app.py改成带Python绝对路径的命令:
fastcgi.server = ( "/" => (( "socket" => "/tmp/fastcgi.socket-0", # 替换成你的Python3绝对路径和app.py路径 "bin-path" => "/usr/bin/python3 /home/your-user/your-app/app.py", "max-procs" => 1 )) )
2. 修正Socket文件的权限与归属
init启动的lighttpd通常以www-data用户运行,而手动启动时用的是当前用户,导致socket文件权限不匹配:
- 方法一:在lighttpd配置里指定socket权限和运行用户
fastcgi.server = ( "/" => (( "socket" => "/tmp/fastcgi.socket-0", "bin-path" => "/path/to/your/app.py", "max-procs" => 1, "socket-perms" => "0660", "bin-environment" => ( "USER" => "www-data", "GROUP" => "www-data" ) )) )
- 方法二:在init脚本里添加清理旧socket的步骤,打开
/etc/init.d/lighttpd,在启动命令前加入:
rm -f /tmp/fastcgi.socket-0
3. 指定应用的工作目录
如果你的app.py依赖当前目录下的文件(比如模板、配置),init启动时的工作目录可能不是应用所在目录,导致脚本执行失败:
在fastcgi配置里添加工作目录参数:
fastcgi.server = ( "/" => (( "socket" => "/tmp/fastcgi.socket-0", "bin-path" => "/path/to/your/app.py", "max-procs" => 1, "working-directory" => "/path/to/your/app/directory" )) )
4. 检查SELinux/AppArmor限制
如果系统开启了SELinux或AppArmor,可能阻止lighttpd访问socket或执行Python脚本:
- 临时关闭SELinux测试:
setenforce 0,如果恢复正常,再通过semanage添加允许规则; - 对于AppArmor,检查
/etc/apparmor.d/usr.sbin.lighttpd配置,添加对socket文件和Python脚本路径的访问权限。
内容的提问来源于stack exchange,提问作者busterroni
相关产品推荐
相关产品推荐

