我有一个脚本将其作为 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/