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

我正在使用重复来通过FTP创build我的服务器的夜间备份。 我写了一个脚本,执行本地和远程备份并logging输出结果。 当我以root用户身份运行这个脚本时,它执行得很好。 但是,当我将其设置为cron作业并运行它时,脚本将执行但ftp部分失败。 不久后,我得到一个错误消息说:“ncftpls – 命令未find,请安装ncftp 3.1.9或更高版本”,但它被安装! cron作业是否有某些原因,无法find机器上存在的命令? 它有自己的PATH或类似的东西?

任何帮助是极大的赞赏,

麦克风

你使用绝对path? Cron作业不会打开交互式shell,因此通常设置PATH的bash init脚本(bashrc,bash_profile等)可能不会运行 – 如果是,它们将使用root,而不是你的。 如果您不确定命令的位置,可以使用which <command>来查找绝对path。

在处理cron脚本时,一般的经验法则是(a)要设置PATH或(b)使用绝对path。

祝你好运!

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

运行foobar命令而不提供path的示例:

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

有了一条path:

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

您还可以通过设置SHELL像shell那样指定运行作业的shell: SHELL=/bin/bash for bash。 有关更多示例,请参阅man 5 crontab