[英]Ubuntu cron shebang not working
我有一个脚本作为shebang #!/usr/bin/env node
。
当 cron 运行我的脚本时,我收到此错误/usr/bin/env: node: No such file or directory
。
当我以我的用户身份运行脚本时,脚本运行良好,只是不像 cron。 我猜这是因为 node 不在运行 cron 的用户的 PATH 上?
我怎样才能让这个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
?)安装在一致的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.