Featured image of post 简单解决Node中libm.so.6:version `GLIBC_版本’notfound问题

简单解决Node中libm.so.6:version `GLIBC_版本’notfound问题

起初是搭建v2board中需要配置队列服务时出现的报错,主要原因为node版本不支持低版本的glibc库

心路

问题复现

按照官网文档要求,通过宝塔面板的进程守护管理器配置
在宝塔安装进程守护管理器添加任务后,进程状态为“FATAL”,或是“BACKOFF”
检查无错误日志,运行日志如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   [2m+14 vendor frames [22m
  15  artisan:37
      Illuminate\Foundation\Console\Kernel::handle()
Horizon started successfully.

   ErrorException 

  pcntl_signal() has been disabled for security reasons

  at vendor/laravel/horizon/src/Console/HorizonCommand.php:54
    50|         pcntl_signal(SIGINT, function () use ($master) {
    51|             $this->line('Shutting down...');
    52| 
    53|             return $master->terminate();
  > 54|         });
    55| 
    56|         $master->monitor();
    57|     }
    58| }

      [2m+14 vendor frames [22m
  15  artisan:37
      Illuminate\Foundation\Console\Kernel::handle()

然后尝试通过pm2管理器,启动指定项目来代替
配置要求如下

项目所在根目录:/www/wwwroot/网站根目录/
启动文件名称:pm2.yaml
项目名称:v2board

不出所料,在宝塔pm2管理器中配置报错,闪出一段错误反馈
随后通过ssh登陆服务器,依次安装Node js与node版本管理工具“n”和pm2
安装Node.js

1
2
3
4
5
6
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum -y install nodejs
npm install -g n
n latest
n
node -v

安装pm2

1
npm install -g pm2

随后进入网站根目录

1
cd /www/wwwroot/根目录/

添加启动文件为pm2.yaml,APP名称为v2board的守护队列服务

1
pm2 start pm2.yaml --name v2board

^当时status中为flase状态

之后查看node版本时发现报错

问题解析

主要原因是我的服务器系统(CentOS 7.9.2009)版本没有node最新版本的所支持的GLIBC库版本
而GLIBC为Linux底层的api,与GNU相关,Azure快照收费没敢动
考虑到这个实例里的服务少且不重要,那为啥不安低版本的node

急转弯

安装node12.17.0,默认自动启动安装的版本

1
nvm install 12.17.0


再来一遍-添加启动文件为pm2.yaml,APP名称为v2board的守护队列服务

1
pm2 start pm2.yaml --name v2board

查看服务

1
pm2 ls

查看当前node版本

1
node -v

智障方法

在写这篇文章时,发现宝塔的pm2管理器可以直接改node版本,Fxxk

拓展 -n的相关命令

安裝指定版本

1
n <node-version>

安装最新稳定版本

1
n stable

查看现在node环境

1
n

删除指定版本

1
n rm <node-version>