我已经尝试导出我的路径和变量,而crontab仍然无法运行我的脚本。我确定我做错了什么。
我有一个运行jar文件的shell脚本。这不能正常工作。
阅读后我读到这通常是由于cron通过自己的shell实例运行而导致路径不正确,因此没有与我的配置文件相同的首选项设置。
以下是我的脚本在经过多次修改后的样子:
#!/bin/bash --
. /root/.bash_profile
/usr/bin/java -jar Pharmagistics_auto.jar -o
...
这些是脚本中最重要的部分,其余部分都是基于shell的。
有人能告诉我我做错了吗?
答案 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)
一些想法。
--
#!/bin/bash
touch /tmp/MY_SCRIPT_RAN && exit
)set -x
和set -v
调试脚本答案 4 :(得分:0)
您是否在个人.profile(或其他脚本)中定义了必要的路径和环境变量?您是否尝试过采购该特定文件(或者您正在使用/root/.bash_profile做什么?)
另一种提出这个问题的方法是:你确定你所期望的任何必要路径和环境实际可用吗?
如果没有别的,您是否尝试回显单个值或仅在脚本中使用“env”命令然后查看标准输出?
答案 5 :(得分:0)
提供jar文件的完整路径,以及运行crontab的用户是什么?如果您为普通用户进行设置,您认为该用户是否有权获取根的配置文件?