使用特定用户运行节点脚本

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

在我的笔记本电脑 Ubuntu 14.04 上,我创建了一个文件

~/test.js
,其中包含唯一的内容
console.log("Hi, this is Dog.")
。我运行脚本
node test.js
(节点 v6.9.5),并获得所需的输出
Hi, this is Dog.

然后我尝试以

www-data
用户身份运行脚本。于是我就跑了:

sudo -u www-data /usr/bin/node /home/me/test.js

还有...

错误:找不到模块'/home/me/test.js'

我做错了什么?

我尝试过相对和绝对路径,

sudo -u www-data sh -c "/usr/bin/node /home/me/test.js"

www-data
/etc/passwd
的外壳更改为
/bin/bash
/bin/sh
,以及这些想法的所有组合。同样的错误。有什么想法吗?

node.js linux bash shell ubuntu
3个回答
0
投票

在我看来,权限的设置使得 www-date 用户无权访问该文件。

登录创建 test.js 文件的用户帐户时,请尝试以下操作:

chmod a+wx test.js

然后再次运行 sudo 命令。


0
投票

使用特定用户运行 shell。 这是一个有效的例子。用户是我。从 root 用户运行此 shell。

HOME=/home/me sudo -u me bash -c '\
  cd /home/me/my_node_app_location
  export NVM_DIR="/home/me/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
  [[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion
  nvm use 11
  npm install
  node app.js
'

请记住,您必须加载 nvm 才能使 npm 或节点命令正常工作。


0
投票

HOME 文件夹是用户特定的。当您运行

sudo
时,您实际上以管理员用户身份运行该命令。该用户的主目录与普通用户不同,并且
/home/me/test.js
不存在于管理员用户的主目录中 - 因此出现错误。

一个类似的、非常典型的错误是运行依赖于为普通用户设置的 ENV 变量的脚本,但随后使用

sudo
运行脚本;对于
sudo
用户来说,这些变量不存在。

© www.soinside.com 2019 - 2024. All rights reserved.