我有一个脚本,如果我从命令行手动执行它,它会完美运行。但是,当它通过 cron 运行时,作业会失败并出现以下错误:
/usr/bin/env:escript:没有此文件或目录
脚本的第一行是:
#!/usr/bin/env escript
我唯一能想到的就是没有找到 escript,这是因为它没有安装在 /usr/bin 中,而是安装在用户主目录的子目录中。
我对 cron 的理解(也许是误解)是,cron 在用户的 UID/GID 下运行用户 crontab 中的每个作业。它是否也不应该从用户那里继承 PATH 变量?是否必须将所有内容指定为绝对路径?
答案1
Cron 在用户的 UID 下运行,但具有最小值PATH
。您的脚本需要使用解释器 (escript) 的完整路径,或者您需要PATH
在 crontab 中设置。
答案2
cron 不会从用户的交互式设置中继承 PATH。PATH 设置为“/usr/bin:/bin”
您可以在 crontab 行上设置环境变量
有关详细信息,请参阅 man crontab,例如男人crontab