使用PM2(nodejs)上传文件时无法创建文件夹

时间:2019-05-23 12:59:42

标签: javascript node.js permissions pm2

目标: 上传文件(图像)后创建一个文件夹

背景: 用户通过第三方PHP fileuploader应用程序上传文件(图像)。将文件上传到服务器(/ var / www / html / static)后,应在静态文件夹中创建一个文件夹。

服务器: Ubuntu 18.04.1 LTS

网络服务器: Apache 2

权限设置:

drwxrwxr-x  4 www-data  www-data    4096 May 22 21:39 static/

用户: john (位于www-data组中)

用户 john 可以使用以下方法在静态文件夹中创建文件夹:

mkdir foobar

脚本: index.js

var chokidar = require('chokidar');
var execSh = require("exec-sh");

chokidar.watch('/var/www/html/static', {
    ignored: /((^|[\/\\])\..|\@)/,
    ignoreInitial: true
}).on('add', path => {
    if (!/(jpe?g|gif|png)$/i.test(path)) return;
    execSh('whoami');
    execSh('mkdir foobar');
})

问题:

如果我使用以下命令运行此脚本:

node index.js

文件夹(foobar)已创建

execSh('whoami'); // john
execSh('mkdir foobar'); // folder created

如果我使用以下命令运行此脚本:

pm2 start index.js

未创建文件夹(foobar)。

execSh('whoami'); // john
execSh('mkdir foobar'); // mkdir: cannot create directory 'foobar': Permission denied

pm2在 john 用户

下运行index.js

如果我将权限777更改为静态文件夹

drwxrwxrwx  4 www-data  www-data    4096 May 22 21:39 static/

节点index.js pm2 start index.js 都可以正常工作

问题: 为什么我无法使用PM2创建文件夹? index.js脚本(execSh('mkdir foobar'))中的命令是否在其他用户下运行?在两种情况下(execSh('whoami'))返回用户john。不了解引擎盖下发生了什么...

0 个答案:

没有答案