shell脚本不通过crontab运行,手动运行正常
题
我尝试导出我的路径和变量,但 crontab 仍然不会运行我的脚本。我确信我做错了什么。
我有一个运行 jar 文件的 shell 脚本。这无法正常工作。
阅读周围后,我发现这通常是由于 cron 通过其自己的 shell 实例运行而导致路径不正确,因此没有与我的配置文件相同的首选项设置。
这是我的脚本经过多次修改后的样子:
#!/bin/bash --
. /root/.bash_profile
/usr/bin/java -jar Pharmagistics_auto.jar -o
...
这些是脚本中最重要的部分,其余部分是直接基于 shell 的。
有人可以告诉我我做错了什么吗?
解决方案
尝试指定的jar文件的全路径:
/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o
其他提示
我只想告诉你,你已经排除:检查你的路径和环境
既然你已经alredy做到了这一点,开始调试。就像写检查站到一个日志文件,看看你的脚本走多远(如果连下开始的),检查错误的cronjob日志文件,检查你的电子邮件(发送的cron上的错误邮件)等等...
不是很具体,对不起。
“我的出口路径和变量”不会由不同用户自的crontab运行工作在不同的外壳。
另外,不知道这是你如何进入的问题一个错字,但我看到:
usr/bin/java
...我不禁注意到你没有指定的完全限定路径。它寻找一个在当前工作目录中名为“USR”目录。经常时间crontab中,所述CWD是未定义的,因此参考变为不通。
尝试从根指定的全路径,像这样:
/usr/bin/java
或者,如果你想看到在行动相对寻路的例子,你也可以尝试:
cd /
usr/bin/java
一些想法。
- 去除
--
之后#!/bin/bash
- 确保将 cron 看到的脚本输出定向到邮件或其他可以查看它的地方(例如MAILTO=所需用户)
- 确认您的脚本正在运行并且没有被其他长时间运行的脚本阻止(例如在第二行添加
touch /tmp/MY_SCRIPT_RAN && exit
) - 使用调试脚本
set -x
和set -v
一旦你知道它实际上正在运行
你定义必要的路径和env您的个人.profile文件(或其他脚本)瓦尔?你有没有试过采购特定的文件(或者是你正在使用/root/.bash_profile已经做什么?)
问这个的另一种方法是:你可以肯定,任何必要的路径和env瓦尔您预计实际可用
?如果不出意外,你有没有试过echo'ing单个值或只是在你的脚本中使用“ENV”命令,然后审查标准输出?
提供完整路径的jar文件,以及哪些用户正在运行你在crontab?如果你将其设置为普通用户,你认为用户有权源根的个人资料?