在linux下面,我有个java程序要定时运行,就写了一个shell来运行,手工运行没有问题,可是将shell放到crontab里面执行的时候就没有达到预期的效果了。在java里面我用System.out.println打印调试,可是没有看到任何输出,不知道输出到哪里去了。如果手工运行可以看到调试数据的。
很是郁闷,可能跟环境有关,可是配置检查环境没有发现问题。
很是郁闷,可能跟环境有关,可是配置检查环境没有发现问题。
但是syste.out.print一般你是看不到的,因为你是后台运行的。一般cron无法运行无非就是下面几个问题
1,用户无权限
2,class文件的路径不对,或者classpath中设置的相关类找不到你可以设置好时间之后去运行cron,然后看看log下面的东西是不是真的运行了比如crontab
11 * * * * * * test.sh到了11分之后你去看看log
crontab执行程序确实和你登录用户的环境有些差异。
一般用户登录到linux后,
ls -al
会看到一个.bash_profile或者.profile文件你最好写一个简单的脚本,如:startJava.sh
内容为
cd $HOME
. ./bash_profile
java -jar xxx #启动你的java程序在java里面我用System.out.println打印调试,可是没有看到任何输出,不知道输出到哪里去了。如果手工运行可以看到调试数据的。
很是郁闷,可能跟环境有关,可是配置检查环境没有发现问题。
crontab下如果正确执行了程序,system.out.println的输出会通过linux mail的方式发给这个用户,
在你下次登录的时候,你会发现系统提示:you have new mails,
然后你打:mail,就可以看到一系列新邮件的列表,直接输入邮件的编号就可以查看内容了。另外,你也可以使用nohup方式来调度程序,这样,系统会将system.out.println的输出,重定向到一个nohup.out文件中:
nohup java -jar xxx