Ubuntu cron shebang不工作

Cat*_*ish 3 linux ubuntu cron node.js 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

Kei*_*son 7

Cron工作在受限制的环境中运行.在交互式shell中,您$PATH可能已设置在您的$HOME/.bash_profile$HOME/.bashrc.Cron作业在未提供这些文件的环境中执行,因此您的用户特定$PATH设置将不可用.

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

* * * * * printenv > crontab-environment
Run Code Online (Sandbox Code Playgroud)

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

* * * * * PATH=$PATH:/home/myuser/.nvm/v0.11.14/bin
Run Code Online (Sandbox Code Playgroud)

或者在crontab中的单独行中:

PATH = /usr/bin:/bin:/home/myuser/.nvm/v0.11.14/bin
Run Code Online (Sandbox Code Playgroud)

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

man 5 crontab 详情.

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

#!/usr/bin/env node
Run Code Online (Sandbox Code Playgroud)

#!/home/myuser/.nvm/v0.11.14/bin/node
Run Code Online (Sandbox Code Playgroud)

您需要node为安装在不同位置的每个系统自定义此选项.或者您可以安排node(或nodejs?)安装在一致的地方.

  • 你建议这个 `PATH = $PATH:/home/myuser/.nvm/v0.11.14/bin` 但 `man 5 crontab` 告诉我它不解析变量,所以这就是我最初设置 PATH 的原因,它导致如果没有完整路径,`env` 将无法工作。 (2认同)