shell脚本没有通过crontab运行,手动运行正常

时间:2010-02-08 21:24:29

标签: linux shell cron crontab

我已经尝试导出我的路径和变量,而crontab仍然无法运行我的脚本。我确定我做错了什么。

我有一个运行jar文件的shell脚本。这不能正常工作。

阅读后我读到这通常是由于cron通过自己的shell实例运行而导致路径不正确,因此没有与我的配置文件相同的首选项设置。

以下是我的脚本在经过多次修改后的样子:

#!/bin/bash --

. /root/.bash_profile

/usr/bin/java -jar Pharmagistics_auto.jar -o

...

这些是脚本中最重要的部分,其余部分都是基于shell的。

有人能告诉我我做错了吗?

6 个答案:

答案 0 :(得分:13)

尝试指定jar文件的完整路径:

/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o

答案 1 :(得分:3)

我会告诉你你已经排除了什么:检查你的路径和环境。

由于您已完成此操作,因此请开始调试。就像将检查点写入日志文件以查看脚本获取的距离(如果甚至根本没有启动),检查cronjob日志文件是否有错误,检查邮件(cron发送错误邮件)等等......

不是很具体,对不起。

答案 2 :(得分:2)

“导出我的路径和变量”将不起作用,因为crontab由不同的用户在不同的shell中运行。

另外,不确定这是否是您输入问题的错误,但我看到了:

  

usr/bin/java

...我不禁注意到你没有指定完全合格的路径。它正在寻找当前工作目录中名为“usr”的目录。对于crontab来说,cwd是未定义的,因此你的引用无处可去。

尝试从root指定完整路径,如下所示:

  

/usr/bin/java

或者,如果您想查看相关路径的示例,您还可以尝试:

  

cd /

     

usr/bin/java

答案 3 :(得分:1)

一些想法。

  1. 删除--
  2. 后的#!/bin/bash
  3. 确保将cron看到的脚本输出定向到邮件或您可以查看的其他位置(例如MAILTO = desiredUser)
  4. 确认您的脚本正在运行且未被其他长期运行的脚本阻止(例如,在第二行,添加touch /tmp/MY_SCRIPT_RAN && exit
  5. 一旦您知道脚本实际正在运行,就使用set -xset -v调试脚本

答案 4 :(得分:0)

您是否在个人.profile(或其他脚本)中定义了必要的路径和环境变量?您是否尝试过采购该特定文件(或者您正在使用/root/.bash_profile做什么?)

另一种提出这个问题的方法是:你确定你所期望的任何必要路径和环境实际可用吗?

如果没有别的,您是否尝试回显单个值或仅在脚本中使用“env”命令然后查看标准输出?

答案 5 :(得分:0)

提供jar文件的完整路径,以及运行crontab的用户是什么?如果您为普通用户进行设置,您认为该用户是否有权获取根的配置文件?