Цель:
создать папку при загрузке файла (изображения)
Справочная информация:
Пользователь загружает файл (изображение) с помощью стороннего приложения PHP fileuploader. Как только он загрузит файл на сервер (/ var / www / html / static), в статической папке должна быть создана папка.
Сервер:
Ubuntu 18.04.1 LTS
Вебсервер:
Апач 2
Настройка разрешений:
drwxrwxr-x 4 www-data www-data 4096 May 22 21:39 static/
Пользователь:
Джон (входит в группу www-данных)
пользователь Джон может создать папку в статической папке, используя:
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 работает с index.js под john user
Если я поменяю разрешения 777 на папку static
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. Не понимаю, что происходит под капотом ...