简单的Java命令未在Cron中运行

时间:2016-07-01 13:07:25

标签: java shell cron sh

我们尝试在以下shell脚本中运行java命令失败:

#!/bin/bash
/usr/java/jdk1.8.0_91/bin/java -jar /home/cyberren/cyberren/cyberexe/D50_1_Migration.jar > d50Migration.log

我们在cron文件中使用以下行调用它:

45 08 * * * /home/cyberren/queries/d50migration.sh

我们已确认shell脚本是通过cron运行的,但它不会执行java。它尝试,但我们的日志输出就是这一行:

2016-Jun-30 08:58:11 - D50_1_Migration Process v104

我们期待以下更多行:

2016-Jun-30 08:58:11 - D50_1_Migration Process v104
2016-Jun-30 08:58:11 - migrateData -> SQL: UPDATE D50_1 SET xassessment = 192, iStepsTotal = 9 WHERE xIndx = 128
2016-Jun-30 08:58:11 - migrateData -> SQL: UPDATE D50_1 SET xassessment = 192, iStepsTotal = 9 WHERE xIndx = 129
...

我们可以手动运行相同的shell脚本,并执行java。我们也可以手动执行java行,并且运行正确。

重复一遍:

  • cron作业按计划运行
  • shell脚本运行
  • 创建了日志,但只有初始行
  • shell脚本中的java行无法运行
  • shell脚本和独立java行都成功手动运行
  • 我们已确认所有引用的目录

提前感谢您的想法和建议。

更新/其他信息:

  • (编辑)权限正确
  • (编辑)尝试根据Alex的建议添加前面的cd "$(dirname "$0")"行。相同的输出。

解决方案:

  • @Jackson,您可能无法访问jar文件的源代码,因此调试将毫无结果。尝试设置cron作业,以便从bash登录调用它并将STDERR输出发送到STDOUT并将其记录到一个文件中,这应该这样做,45 08 * * * /bin/bash -l -c "cd /home/cyberren/queries; ./d50migration.sh 2&>1 |tee -a /home/cyberren/d50migration.log"这样你应该看到所有的输出和错误输出生成(如果有的话) - Finbarr O'Brien 22分钟前
  • 起初我们很高兴有办法看看我们的错误,但你的cron线成功运行了.jar!您已经解决了我们的问题并为我们提供了一种通过cron成功安排和运行java归档文件的方法。

1 个答案:

答案 0 :(得分:3)

尝试设置cron作业,以便从bash登录调用它并将STDERR输出发送到STDOUT并将其记录到文件中,这应该这样做:

45 08 * * * /bin/bash -l -c "cd /home/cyberren/queries; ./d50migration.sh 2>&1 |tee -a /home/cyberren/d50migration.log" 

这样你就可以看到生成的所有输出和错误输出(如果有的话)