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

时间:2017-02-16 17:38:46

标签: node.js linux bash shell ubuntu

在我的笔记本电脑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的shell更改为/bin/bash/bin/sh以及这些想法的所有组合。同样的错误。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

听起来我已设置权限,以便www-date用户无权访问该文件。

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

chmod a+wx test.js

然后再次运行你的sudo命令。

答案 1 :(得分: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或节点命令正常工作。

答案 2 :(得分:0)

HOME文件夹是特定于用户的。当您运行sudo swapoff -a && \ apt remove unattended-upgrades -y && \ killall -9 unattended-upgr 2>/dev/null 时,您将以Admin用户身份有效地运行该命令。该用户的HOME目录与普通用户不同,并且sudo在Admin用户的HOME目录中不存在-因此出现错误。

一个类似的非常典型的错误是运行依赖于为普通用户设置的ENV变量的脚本,然后使用/home/me/test.js运行该脚本;对于sudo用户而言,变量不存在。