在我的笔记本电脑 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
,以及这些想法的所有组合。同样的错误。有什么想法吗?
在我看来,权限的设置使得 www-date 用户无权访问该文件。
登录创建 test.js 文件的用户帐户时,请尝试以下操作:
chmod a+wx test.js
然后再次运行 sudo 命令。
使用特定用户运行 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 或节点命令正常工作。
HOME 文件夹是用户特定的。当您运行
sudo
时,您实际上以管理员用户身份运行该命令。该用户的主目录与普通用户不同,并且 /home/me/test.js
不存在于管理员用户的主目录中 - 因此出现错误。
一个类似的、非常典型的错误是运行依赖于为普通用户设置的 ENV 变量的脚本,但随后使用
sudo
运行脚本;对于 sudo
用户来说,这些变量不存在。