我有一个通过 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
和个人用户启动该过程,没有任何变化。
您可以使用 sudo 运行 pm2 进程或更改 /var 文件夹中文件夹的权限。
/var 文件夹的所有者是 root:
drwxr-xr-x 15 root root 4096 May 4 16:49 var
因此,您登录的用户无法创建任何文件夹。解决这个问题:
sudo pm2 start app.js --time
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