在Linux OpenSuse cron上,脚本运行,但只生成空日志

时间:2014-09-14 00:51:24

标签: java linux cron opensuse

我有OpenSuse Linux 12.3,我有一个每半小时运行一次的脚本文件。我知道它运行是因为它生成了一个日志文件。日志文件如下:myscript.sh

我应该说这个脚本在命令行中运行良好。它也可以在任务计划程序中正常运行,如果我告诉现在"立即运行"它运行,并且确实生成一个日志文件,并且日志文件中包含相应的日志数据。

我确实将脚本更改为chmod 777,所以一切都可以访问它。我知道cron服务正在系统上运行。我可以看到生成的日志文件,但日志中没有任何内容。它们是0字节大小的文件。这是任务计划程序运行的时候。

所以,再次,这是脚本:myscript.sh:

datestr=$(date +%Y%m%d_%H%M%S)
cd /home/tholmes/git/Tom_Utils/Tom_Utils
mvn exec:java -Dexec.mainClass="com.tom.test.utils.fix.MyJavaApp" -Dexec.args="12" > /home/tholmes/logs/my_java_app/12_$datestr.log

所以,我知道这个脚本中的所有命令都能完美运行吗?当我手动在任务计划程序中运行脚本时,它工作正常,并生成一个日志。但是当任务计划程序自动运行时,它不会运行...

任何人都可以帮助我做错了吗?我没想到会有这么难。

2 个答案:

答案 0 :(得分:0)

通过附加stderr来抓取2>&1。此外,您可以使用单个\

分解长队
mvn exec:java -Dexec.mainClass="com.tom.test.utils.fix.MyJavaApp" \
    -Dexec.args="12" > /home/tholmes/logs/my_java_app/12_$datestr.log 2>&1

您也可以将stderr写入第二个文件

mvn exec:java -Dexec.mainClass="com.tom.test.utils.fix.MyJavaApp" \
    -Dexec.args="12" > /home/tholmes/logs/my_java_app/12_$datestr.log \
    2>/home/tholmes/logs/my_java_app/12_$datestr.err

答案 1 :(得分:0)

我找到了另外3个问同样问题的人,即:

为什么不会执行一个正在执行脚本的cron作业,而不是执行特定的maven命令?

1)我做的第一件事是将maven本地下载到我的/opt/maven-3.2.3目录。 通常,当我开发我的java代码时,maven正在eclipse中内置的maven中运行。

2)在我的脚本中,我为JAVA_HOME,JRE_HOME,MAVEN_HOME添加了导出,如下所示:

export JAVA_ROOT=/opt/java
export MAVEN_HOME=/opt/maven
export MAVEN_BINDIR=/opt/maven/bin
export JAVA_HOME=/opt/java
export JAVA_BINDIR=/opt/java/bin
export JRE_HOME=/opt/java/jre
export JRE_BINDIR=/opt/java/jre/bin
export PATH=${JAVA_HOME}:${JAVA_BINDIR}:$PATH
export PATH=${MAVEN_HOME}:${MAVEN_BINDIR}:$PATH
export PATH=${JRE_HOME}:${JRE_BINDIR}:$PATH
export PATH=${JAVA_HOME}:${JAVA_BINDIR}:$PATH

因此,java和maven的路径都在脚本中设置。

3)最后,我确保我确保mvn是从它的位置调用的(/ opt / maven / bin),这可能是因为路径建立以来一直有点过分,但我想确保maven命令将从正确的位置执行。

/opt/maven/bin/mvn exec:java -Dexec.mainClass="com.tom.test.utils.fix.MyJavaApp" -Dexec.args="12"

这解决了我的问题,我希望这有助于其他人。 : - )