Shell脚本在单独运行时工作正常但在cron作业中进行调度时失败

时间:2013-11-16 13:26:53

标签: shell unix cron crontab ksh

我有一个脚本,它在shell中运行时运行得很好。

但是在cron作业中安排相同的脚本时,运行不完整或部分。 它会突然终止

我已安排cron作业每15分钟运行一次。

这是cronjob的代码。

0,15,30,45 * * * * /home/convteam/Conversion/update_revenue/RunUpdateRevenue.ksh > /home/convteam/Conversion/update_revenue/RunUpdateRevenue.log

我正在使用名为'convteam'的用户而不是root用户安排作业。

你能帮助我,我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:1)

这是一个反复出现的问题。 cron作业失败的最常见原因是:

  1. 关于相对文件路径的假设 - 在

  2. 中使用完整的绝对文件名
  3. 有关环境的假设。您应该“获取”您依赖的启动文件,通常(对于ksh):

    . /etc/profile
    . ~/.profile
    . "$ENV"
    
  4. $ENV是可选的,但在使用时通常具有值~/.kshrc

答案 1 :(得分:0)

crontab以非登录,非交互模式调用shell。在这种模式下,Bash shell不会加载通常的启动文件,例如/ etc / profile,〜/ .bash_profile,〜/ .bash_login,〜/ .profile,〜/ .bashrc,它们可能会丢失一些重要的环境变量定义,如PATH。

您可以通过在crontab中运行ksh脚本之前获取特定的启动文件(/ etc / profile,〜/ .profile在ksh中,如果它们存在且可读)来解决您的问题。你可以“man ksh”来查看ksh启动过程的细节。

相关问题