从 cron 按名称调用实用程序(没有完整路径)不起作用

从 cron 按名称调用实用程序(没有完整路径)不起作用

我安装了一些控制台实用程序。它在 中/usr/local/bin/my_utility。我可以将其调用为,my_utility并且它运行良好。我创建了一个运行 bash 脚本的 cron 任务。该 bash 脚本调用my_utility。仅当我通过 cron 运行 bash 脚本时才会出现错误“my_utility:未找到命令”。

为什么找不到?直接运行 bash 脚本可以正常工作。此外,该脚本使用其他环境变量也没有失败。

答案1

PATH如果您未指定完整路径,系统将查找目录中的可执行文件。因此,这几乎肯定是因为PATHcron 使用的变量不包含/usr/local/bin/

也有可能该实用程序是一个脚本,并且没有在第一#!行 ( ) 指定其解释器的完整路径。如果此解释器的路径在您PATH登录时存在,但在 cron 中不存在,PATH那么您会遇到类似的问题。

一般来说,在从 cron 运行的脚本中始终使用完整路径是一种很好的做法,因为 cron 的设置可能与PATH您不同。另一种方法是从 cron 以 的形式调用脚本,并在脚本中/full/location/of/script为 设置一个新值。PATH

我们在 FreeBSD 上经常遇到这个问题,因为 cron/usr/local默认情况下不会搜索,而大多数(如果不是全部?)Linux 发行版都会搜索。

相关内容