将java程序的所有输出重定向到日志文件

将java程序的所有输出重定向到日志文件,java,linux,cron,Java,Linux,Cron,我已通过在crontab末尾保存此行来计划我的jar文件: 30 12 * * * java -jar test.jar > test.log (I have also tried test.txt) Cron已经启动了作业,也创建了日志文件,但该文件中没有任何内容。知道为什么吗?我正在程序中执行System.out.println() 我已经为每个人添加了该文件的写入权限 在应用程序启动之前,调度程序是否会崩溃?当我通过执行grep CRON/var/log/syslog检查cront

我已通过在
crontab
末尾保存此行来计划我的
jar
文件:

30 12 * * * java -jar test.jar > test.log (I have also tried test.txt)
Cron已经启动了作业,也创建了日志文件,但该文件中没有任何内容。知道为什么吗?我正在程序中执行
System.out.println()

我已经为每个人添加了该文件的写入权限

在应用程序启动之前,调度程序是否会崩溃?当我通过执行
grep CRON/var/log/syslog
检查
crontab
的日志时,它给了我好看的输出,没有错误指示:

Sep  2 12:19:01 ip-172-31-18-162 CRON[2308]: (root) CMD (java -jar /opt/bitnami/apache-tomcat/webapps/apps/FullEmailReport/DJOF_FullEmail_DynamicContentReport_ScheduledPart.jar > /opt/bitnami/apache-tomcat/webapps/apps/FullEmailReport/data/app.txt)

尝试添加2>&1以将System.err重定向到该文件:

30 12 * * * java -jar test.jar > test.log 2>&1

这是一个有点老的问题,但我认为它可能值得指出,因为没有人提到它

cron不知道您的路径,也不知道java在哪里。在我编写Solaris shell脚本的时候,我们必须在cron中设置所有内容的完整路径。因为我不知道java安装的确切位置,也不知道test.jar文件的确切位置,所以我无法编写完整的确切命令,但它可能类似于:


30 12***/usr/bin/java-jar/home/username/myTestStuff/test.jar>/user/username/myTestStuff/logfiles/test.log 2>&1

您选择使用命令行执行此操作而不是在程序中写入该文件,是否有特定的原因?您对该文件所在的目录具有写入权限?另外,您确定java程序本身中没有重定向
System.out
?当我尝试从shell运行jar文件时,它会显示“错误:无法访问jarfile test.jar”。我已经尝试将文件夹的所有者更改为root/ubuntu/tomcat/bitnami,我还为所有文件授予了公共RWE权限,但仍然会发生此错误。如果无法从命令行执行命令,则很难编写一个可以正常运行的cron作业。这不是cron的问题,而是您的环境中禁止您执行命令的问题。谢谢,说得好。但是,请检查我在一个问题下的最后评论。上面说无法访问jar文件。请不要介意评论。。。当我试图执行时,我在另一个文件夹中/