在linux下面,我有个java程序要定时运行,就写了一个shell来运行,手工运行没有问题,可是将shell放到crontab里面执行的时候就没有达到预期的效果了。在java里面我用System.out.println打印调试,可是没有看到任何输出,不知道输出到哪里去了。如果手工运行可以看到调试数据的。
很是郁闷,可能跟环境有关,可是配置检查环境没有发现问题。

解决方案 »

  1.   

    cron运行的log一般都是在/var/spool/cron下面的。
    但是syste.out.print一般你是看不到的,因为你是后台运行的。一般cron无法运行无非就是下面几个问题
    1,用户无权限
    2,class文件的路径不对,或者classpath中设置的相关类找不到你可以设置好时间之后去运行cron,然后看看log下面的东西是不是真的运行了比如crontab
    11 * * * * * * test.sh到了11分之后你去看看log
     
      

  2.   

    在linux下面,我有个java程序要定时运行,就写了一个shell来运行,手工运行没有问题,可是将shell放到crontab里面执行的时候就没有达到预期的效果了。
    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
      

  3.   

    在crontab中定时执行的命令不应该有控制台输出(你可以用输出重定向来达到这个目的),因为它根本不打开控制台。如果有控制台输出会转成向你发一封邮件,邮件的内容就是这次执行命令时产生的控制台输出。