需要帮助设置cron。脚本在ssh中工作正常

时间:2013-02-17 17:43:30

标签: shell path cron which

所以我认为概率很可能是路径。但我对如何正确设置这个感到困惑。

所以我的脚本顶部如下:

#!/bin/sh


MYSQL="$(which mysql)"
if [ -z "$MYSQL" ]; then
    echo "Error: MYSQL not found"
    exit 1
fi

当我在ssh中运行脚本时,它工作正常!但是当我设置cron时,在directadmin中使用这些命令:

/home/username/script.sh

也尝试过:

/bin/sh /home/username/script.sh

他们两个都给我以下错误:

Error: MYSQL not found

以下是我在网上找到的内容:

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 
HOME=/var/log

我假设我需要在我的脚本中添加至少一个上述语句。服务器是一个freebsd服务器,我假设一切都在默认位置。我知道当我做的时候,它会返回/ bin / sh

我不知道如何检查PATH或家。我是freebsd的新手,所以任何帮助都会很棒。

谢谢, 布赖恩

4 个答案:

答案 0 :(得分:1)

Crontab作业由系统提交,不执行正常的系统启动脚本(设置PATH和类似的东西)。

我在Solaris上的Korn shell中完成所有工作,并在所有脚本的开头添加类似于这些的行:

#!/bin/ksh
#-------------------------------------------------------------------------------
# /opt/app/batch/daily_dns.ksh  Daily DNS Batch process via crontab
# 16 3 * * * /opt/app/batch/dns/bin/daily_dns.ksh > /opt/app/batch/daily_dns.log
#-------------------------------------------------------------------------------
. /etc/profile

您可能需要做类似的事情。

答案 1 :(得分:0)

我只是做了一个有根据的猜测,因为我只熟悉Debian,但是cron以root身份运行任务并以非交互方式运行它们。这意味着它获得与root用户相同的路径,并且通常非交互式提示在设置路径之前退出.bash_profile。

TL; DR:检查您的root用户是否有MYSQL变量,并检查root用户的.bash_profile是否在非交互式提示时退出。

答案 2 :(得分:0)

您可以阅读env(1)联机帮助页并将其用于诊断和诊断。解决你的问题, 或者只是根据需要修改脚本中的环境。

正如你所提到的那样,它是一个freebsd服务器,我的猜测是你在/ usr / local下安装了mysql - 它不包含在cron的默认$ PATH中。

答案 3 :(得分:0)

这是因为PATH问题。您可以根据上述答案在crontab文件中指定路径变量,也可以修改脚本。

如果你决定决定后者,这里需要修改,

  1. 在您的标准终端上,运行“哪个”以找出系统中“哪个”工具的确切路径(通常为“ / usr / bin / which “)
  2. 将脚本中的“which”替换为完整路径。
  3. 现在你可以在crontab中使用 - “ / bin / sh / path / to / your / script ”来编写脚本。在这种情况下,您不需要在crontab文件中添加任何额外的路径变量。

    希望这有帮助。