在我的笔记本电脑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
以及这些想法的所有组合。同样的错误。有什么想法吗?
答案 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
用户而言,变量不存在。