我有一个脚本,如果我使用 Bash 从命令行调用它,它会运行良好。但是当 cron 尝试运行它时,它会失败并出现“mysql:未找到命令”错误。
我认为这是因为 cron 没有使用 bash 作为它的 shell,但我不知道如何让 cron 使用 bash。
我尝试将其添加到脚本的顶部:
#!/bin/bash
但没有什么乐趣。我如何强制 cron 使用 bash 作为它的 shell?我对 bash 和 cron 还不熟悉,所以我可能错过了一些简单的东西。我读了几篇 serverfault 帖子(本来想链接到它们,但我不能,新用户)并尽我所能地理解和应用这些信息,还用谷歌搜索了大量信息,但还是卡住了。
答案1
Pulegium 是对的,问题不在于 shell 的类型,而在于 PATH。cron 运行时的搜索路径非常有限,您不应该输入mysql
命令,而应该输入/path/to/mysql
可执行文件的实际路径。通常类似于/usr/local/bin/mysql
。您必须搜索它才能找到确切的路径。此外,如果是 shell 问题,您可以在 cron 文件中运行 bash,然后运行脚本:/bin/bash /path/to/script.sh
,这将确保 bash 是处理该文件的那个。
答案2
最好在 cron 脚本中使用命令的绝对路径。这样您就不会依赖于您可能已自定义的任何 PATH 设置。