Ubuntu cron shebang不工作

时间:2015-03-17 15:53:44

标签: linux node.js ubuntu cron ubuntu-14.04

我有一个脚本作为shebang #!/usr/bin/env node

当cron运行我的脚本时,我收到此错误/usr/bin/env: node: No such file or directory

当我以我的用户身份运行脚本时,脚本运行正常,而不是作为cron。我猜它是因为节点不在运行cron的用户的PATH上?

如何让这个shebang与cron合作?

$ which node给了我 /home/myuser/.nvm/v0.11.14/bin/node

1 个答案:

答案 0 :(得分:7)

Cron工作在受限制的环境中运行。在交互式shell中,您的$PATH可能已设置在$HOME/.bash_profile$HOME/.bashrc中。 Cron作业在没有采购这些文件的环境中执行,因此您的用户特定$PATH设置将无法使用。

您可以通过临时创建crontab条目来查看该环境的外观,如:

* * * * * printenv > crontab-environment

您可以在命令本身的crontab中显式设置$PATH

* * * * * PATH=$PATH:/home/myuser/.nvm/v0.11.14/bin

或在crontab的单独行中:

PATH = /usr/bin:/bin:/home/myuser/.nvm/v0.11.14/bin

您无法(直接)使用通常的PATH=$PATH:/new/dir语法将目录附加到环境设置行中的$PATH,因为变量引用不会替换为这样的行。他们进行处理。

man 5 crontab了解详情。

另一个选择是在脚本本身中使用显式完整路径,更改

#!/usr/bin/env node

#!/home/myuser/.nvm/v0.11.14/bin/node

您需要为其中node安装在其他位置的每个系统自定义此项。或者您可以安排node(或nodejs?)安装在一致的位置。