我安装了一些控制台实用程序。它在 中/usr/local/bin/my_utility
。我可以将其调用为,my_utility
并且它运行良好。我创建了一个运行 bash 脚本的 cron 任务。该 bash 脚本调用my_utility
。仅当我通过 cron 运行 bash 脚本时才会出现错误“my_utility:未找到命令”。
为什么找不到?直接运行 bash 脚本可以正常工作。此外,该脚本使用其他环境变量也没有失败。
答案1
PATH
如果您未指定完整路径,系统将查找目录中的可执行文件。因此,这几乎肯定是因为PATH
cron 使用的变量不包含/usr/local/bin/
。
也有可能该实用程序是一个脚本,并且没有在第一#!
行 ( ) 指定其解释器的完整路径。如果此解释器的路径在您PATH
登录时存在,但在 cron 中不存在,PATH
那么您会遇到类似的问题。
一般来说,在从 cron 运行的脚本中始终使用完整路径是一种很好的做法,因为 cron 的设置可能与PATH
您不同。另一种方法是从 cron 以 的形式调用脚本,并在脚本中/full/location/of/script
为 设置一个新值。PATH
我们在 FreeBSD 上经常遇到这个问题,因为 cron/usr/local
默认情况下不会搜索,而大多数(如果不是全部?)Linux 发行版都会搜索。