简单Java命令未在Cron中运行

简单Java命令未在Cron中运行,java,shell,cron,sh,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运行,但它不执

我们尝试在以下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/querys;/d50migration.sh2&>1 | tee-a/home/cyberren/d50migration.log”
    这样您应该可以看到生成的所有输出和错误输出(如有)-芬巴尔·奥布莱恩22分钟前
  • 起初,我们很高兴能找到一种方法来查看我们的错误,但是您的cron行成功地运行了.jar!您已经解决了我们的问题,并为我们提供了一种通过cron成功调度和运行java归档文件的方法

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

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

这样,您应该可以看到生成的所有输出和错误输出(如果有)

Hi!您可以尝试在jar中添加模式调试行,以查看它的位置bugs@Jägermeister权限很好!我们通过PuTTY与同一用户确认。@Jérèm当通过cron运行而不是手动运行时,它会出现bug有意义吗?根据您在日志中得到一行的事实,或者java程序提前退出,或者r挂起了。如果你使用ps-fu cyberren(假设你的用户是“cyberren”),java进程会发生什么情况吗?我建议您尝试通过java代码对您喜爱的IDE进行分步调试,方法是在java命令中添加调试参数,例如:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7777
,并查看失败的地方。注意:永远不要在注释中添加更多信息;请更新您的问题。再次感谢将周五定为假日周的良好开端我认为应该是
2>&1
,而不是
2&>1
(所以我不想在答案中只编辑两个字符。)