linux - Ubuntu cron shebang 不工作

标签 linux node.js ubuntu cron ubuntu-14.04

我有一个脚本将其作为 shebang #!/usr/bin/env Node

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

当我以我的用户身份运行脚本时,脚本运行良好,只是不是作为 cron。我猜这是因为 Node 不在运行 cron 的用户的 PATH 上?

我怎样才能让这个 shebang 与 cron 一起工作?

$ 哪个 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?)安装在一致的位置。

关于linux - Ubuntu cron shebang 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29103763/

相关文章:

C 编译 "undefined reference to"?

linux - 如何构建使用自定义库的外部 linux 模块

javascript - Nodejs 代码执行中的 UnhandledPromiseRejectionWarning

python - 在 Linux 中管道 numpy 数据?

c - 无需预洗牌即可生成(非常)大的非重复整数序列

linux - 在哪里存储我开发的应用程序?

javascript - nodejs回调不明白回调结果是如何通过参数来的

javascript - 为什么我的 websocket 会在几分钟后关闭?

JAVA_HOME 和 PATH 中的 java 版本不匹配

java - Ukrsotsbank 网上银行小程序错误 "Aplication Blocked by Security Settings"