如何让 PM2 在 Ubuntu Server 上创建文件夹?

问题描述 投票:0回答:1

我有一个通过 PM2 管理的快速应用程序部署到 Ubuntu 服务器。在某个时刻,端点以这种方式接收并保存一些文件

fs.access(path.join(__dirname, '..', 'static', 'images', 'users', userId), (error) => {
  if (error) {
    fs.mkdirSync(path.join(__dirname, '..', 'static', 'images', 'users', userId));
  }
});

但是进程崩溃了。从日志中我可以看到:

0|App | node:internal/fs/utils:344
0|App |     throw err;
0|App |     ^
0|App |
0|App | Error: ENOENT: no such file or directory, mkdir '/var/www/services.my-app.it/static/images/users/Vtk7xRzSU0fmaqyViTbv5ItQTXs2'
0|App |     at Object.mkdirSync (node:fs:1334:3)
0|App |     at /var/www/services.my-app.it/dist/index.js:1:11558
0|App |     at FSReqCallback.oncomplete (node:fs:188:23) {
0|App |   errno: -2,
0|App |   syscall: 'mkdir',
0|App |   code: 'ENOENT',
0|App |   path: '/var/www/services.my-app.it/static/images/users/Vtk7xRzSU0fmaqyViTbv5ItQTXs2'
0|App | }
0|App | error Command failed with exit code 1.

这显然是一个权限问题,但是我无法弄清楚需要权限才能解决问题的用户是什么。

我尝试通过

pm2 start
root
和个人用户启动该过程,没有任何变化。

node.js express permissions pm2 mkdir
1个回答
0
投票

您可以使用 sudo 运行 pm2 进程或更改 /var 文件夹中文件夹的权限。

/var 文件夹的所有者是 root:

drwxr-xr-x  15 root root 4096 May  4 16:49 var

因此,您登录的用户无法创建任何文件夹。解决这个问题:

  1. 使用 sudo 运行进程:
    sudo pm2 start app.js --time
  2. 像这样提升 /var 文件夹内文件夹的权限:
    sudo mkdir -p /var/www/services.my-app.it
    sudo chmod 757  /var/www/services.my-app.it #The permissions for other users should be 7 or 6: chmod **7 folderName 
    mkdir /var/www/services.my-app.it/nestedDir #This will not throw error 
    
© www.soinside.com 2019 - 2024. All rights reserved.