为什么我的 cron 作业找不到特定的命令?

为什么我的 cron 作业找不到特定的命令?

我正在使用 duplicity 通过 FTP 创建服务器的夜间备份。我编写了一个脚本,该脚本可执行本地和远程备份并记录输出结果。当我以 root 用户身份运行此脚本时,它可以正常执行。但是,当我将其设置为 cron 作业并运行它时,脚本会执行,但 ftp 部分会失败。不久之后,我收到一条错误消息,提示“ncftpls - 未找到命令,请安装 ncftp 3.1.9 或更高版本”,但它已安装!cron 作业无法找到计算机上存在的命令,这是什么原因造成的?它有自己的 PATH 还是类似的东西?

任何帮助是极大的赞赏,

麦克风

答案1

您使用的是绝对路径吗?Cron 作业不会打开交互式 shell,因此通常设置 PATH 的 bash init 脚本(bashrc、bash_profile 等)可能无法运行——如果运行,它们将使用 root 的权限,而不是您的权限。如果您不确定命令在哪里,您可以使用 来which <command>找出绝对路径。

处理 cron 脚本时,一般的经验规则是,您要么 (a) 设置 PATH,要么 (b) 使用绝对路径。

祝你好运!

答案2

您应该提供要运行的命令的完整路径,或者应该PATH在 cron 作业中定义。

不提供路径运行 foobar 命令的示例:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
01 * * * * root foobar

使用路径:

01 * * * * root /usr/bin/foobar

您还可以通过设置以下内容来指定在哪个 shell 中运行作业SHELLSHELL=/bin/bashfor bash。请参阅man 5 crontab查看更多示例。

相关内容