所以我认为概率很可能是路径。但我对如何正确设置这个感到困惑。
所以我的脚本顶部如下:
#!/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的新手,所以任何帮助都会很棒。
谢谢, 布赖恩
答案 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文件中指定路径变量,也可以修改脚本。
如果你决定决定后者,这里需要修改,
现在你可以在crontab中使用 - “ / bin / sh / path / to / your / script ”来编写脚本。在这种情况下,您不需要在crontab文件中添加任何额外的路径变量。
希望这有帮助。