目标: 上传文件(图像)后创建一个文件夹
背景: 用户通过第三方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。不了解引擎盖下发生了什么...