我尝试导出我的路径和变量,但 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

一些想法。

  1. 去除 -- 之后 #!/bin/bash
  2. 确保将 cron 看到的脚本输出定向到邮件或其他可以查看它的地方(例如MAILTO=所需用户)
  3. 确认您的脚本正在运行并且没有被其他长时间运行的脚本阻止(例如在第二行添加 touch /tmp/MY_SCRIPT_RAN && exit)
  4. 使用调试脚本 set -xset -v 一旦你知道它实际上正在运行

你定义必要的路径和env您的个人.profile文件(或其他脚本)瓦尔?你有没有试过采购特定的文件(或者是你正在使用/root/.bash_profile已经做什么?)

问这个的另一种方法是:你可以肯定,任何必要的路径和env瓦尔您预计实际可用

如果不出意外,你有没有试过echo'ing单个值或只是在你的脚本中使用“ENV”命令,然后审查标准输出?

提供完整路径的jar文件,以及哪些用户正在运行你在crontab?如果你将其设置为普通用户,你认为用户有权源根的个人资料?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top