You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Ubuntu运行npm run prod提示mix权限被拒绝问题求助

问题背景
  • 运行环境:Laravel 8 + Laravel Mix,Node 14.15.0、npm 8.13.2,部署在AWS Ubuntu服务器,本地同配置环境运行无异常
  • 触发场景:未对项目代码做任何修改的前提下,突然出现执行npm run prod构建失败
  • 已尝试操作:将/tmp目录权限设置为777、修改/tmp目录所有者为当前登录用户,均未解决问题
  • 报错信息:
> prod
> npm run production


> production
> mix --production

/tmp/production65665869399.sh: 2: mix: Permission denied
排查思路

报错核心是npm运行脚本时生成的临时shell文件无执行权限,按优先级从高到低排查:

  • 不要默认把问题归因为/tmp目录本身的读写权限,先确认npm实际使用的临时目录路径,部分环境会自定义npm临时存储路径,和系统默认/tmp不一致
  • 检查临时目录所在磁盘分区的挂载参数:如果分区带noexec挂载标识,哪怕目录权限设为777,目录内的可执行文件也无法运行,这类问题通常是系统安全策略更新、自动调整挂载规则后突发,和项目代码无关
  • 检查项目依赖内的mix二进制文件是否丢失可执行权限,部分场景下依赖文件权限会被系统安全规则、文件同步操作意外修改
可落地解决方法

按排查顺序逐一验证:

  1. 修复临时目录挂载限制
    执行以下命令查看临时目录挂载参数:
    # 查看npm实际使用的临时目录
    npm config get tmp
    # 查看对应目录的挂载参数
    mount | grep 替换为上一步输出的临时目录路径
    
    如果输出结果包含noexec参数,先执行临时修复验证:
    # 替换路径为实际的npm临时目录路径,默认是/tmp就填/tmp
    sudo mount -o remount,exec /tmp
    
    验证构建正常后,编辑/etc/fstab文件,删除对应临时目录挂载行里的noexec配置,保存后重新挂载即可永久生效。
  2. 自定义npm临时目录绕开挂载限制
    如果没有权限修改系统挂载配置,可以在项目目录内新建专属临时目录,指定npm使用该目录(项目目录所在分区默认不会带noexec限制):
    # 在项目根目录执行
    mkdir -p .npm-tmp
    npm config set tmp ./.npm-tmp
    # 重新执行构建
    npm run prod
    
  3. 修复依赖文件权限
    如果以上操作都无效,先检查mix二进制权限:
    ls -l node_modules/.bin/mix
    
    如果权限位没有x(可执行)标识,直接重新安装依赖恢复权限即可:
    rm -rf node_modules
    npm install
    
    不想重装依赖也可以直接给对应文件加可执行权限:
    chmod +x node_modules/.bin/mix
    

内容的提问来源于stack exchange,提问作者Mo Baqeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:32:23