Ubuntu cron shebang 不工作

Ubuntu cron shebang not working

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

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

当我 运行 脚本作为我的用户时,脚本 运行 很好,只是不像 cron。我猜这是因为节点不在 运行s cron?

用户的路径上

如何让这个 shebang 与 cron 一起工作?

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

受限环境中的 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 some_command

或在您的 crontab 中单独一行:

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

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

man 5 crontab 了解详情。

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

#!/usr/bin/env node

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

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