Elastic Beanstalk(Linux2)部署Django Channels postdeploy钩子报-b命令不存在
报错根因定位
你的报错line 13: -b: command not found是02_run_supervisor_daemon.sh脚本中systemenv变量的赋值语法错误导致的:
- 脚本中
systemenv="$systemenv""这一行写法错误,多了一个未转义的空双引号,没有正确给环境变量字符串补上闭合的双引号,导致后续定义的daemonconf整个字符串都被shell错误解析为普通命令执行 - 当解析到
daphne -b :: -p 5000 backend.asgi:application这一行时,shell把-b识别为独立的命令执行,自然触发“命令不存在”的报错
修复步骤
- 修改02_run_supervisor_daemon.sh的变量赋值行
将错误的:
systemenv="$systemenv""
替换为正确的闭合写法:
systemenv="$systemenv\""
- 额外检查项避免后续报错
- 本地打包部署前,给两个钩子脚本加可执行权限:
chmod +x .platform/hooks/postdeploy/*.sh - 确认你的EB环境已经预先安装了supervisor,建议通过.ebextensions配置文件用yum安装supervisor,避免环境缺失依赖
- daphne命令建议写全路径,若使用EB默认的虚拟环境,路径为
/var/app/venv/staging-LQM1lest/bin/daphne,避免supervisor找不到可执行文件 - 检查daemonconf中的directory、ASGI应用路径是否和你的项目实际结构匹配,不要硬抄示例中的
backend.asgi:application
EBS Linux 2环境部署Django Channels核心学习要点
- 先掌握EB Linux 2平台的钩子执行逻辑,postdeploy钩子运行在应用代码解压完成、权限配置完成之后,运行身份为root
- 配置Channels通道层时,如果使用Redis,需要确认EB实例的安全组开放对应端口,若使用AWS ElastiCache需要配置正确的VPC访问权限
- Supervisor生成的配置文件要确认日志存储路径的写入权限,避免daphne进程启动失败
- 部署后可以通过
eb ssh登录实例,直接运行supervisorctl status daphne检查进程状态,查看/var/log/stdout_daphne.log定位启动问题
内容的提问来源于stack exchange,提问作者Sujit Noronha
相关产品推荐
相关产品推荐

