【问题标题】:JAR file not reading input from Scanner(System.in) on crontab executionJAR 文件在 crontab 执行时未从 Scanner(System.in) 读取输入
【发布时间】:2011-12-17 10:25:42
【问题描述】:


我创建了一些应用程序,它使用以下方法从 System.in 中读取:

    Scanner input = new Scanner(System.in);

    while (input.hasNextLine()) {

        String line = input.nextLine();

    }

输入数据正在通过linux命令传递:

cat -A /home/someuser/somefile.txt | java -classpath "$CLASSPATH" com.test.Main

crontab 条目如下所示:

MAILTO=someuser
CLASSPATH="/home/someuser/test.jar:/usr/share/java/jdom.jar:/usr/share/java/mysql-connector-java.jar"

0,10,20,30,40,50 * * * * cat -A /home/someuser/somefile.txt | java -classpath "$CLASSPATH" com.test.Main  >/home/someuser/output.txt

文件的权限显示如下:

-rw-r--r-- 1 someuser serhiy 8385601 2011-02-07 10:57 /home/someuser/somefile.txt

在我的机器(Ubuntu 9)上一切正常,但在另一台机器 Ubuntu 8 上安装后,我发现程序启动但似乎没有读取任何内容。我已经三次检查了所有配置和所有权限,结果仍然相同。当我手动运行命令时,一切正常,当它由 crontab 运行时,它似乎没有读取输入。以前有人遇到过这个问题吗?

感谢您的帮助
塞尔希。

【问题讨论】:

    标签: java ubuntu crontab java.util.scanner cat


    【解决方案1】:

    您是否在 crontab 中定义变量?这似乎不对。

    1) 将命令移动到 shell 脚本并从 cron 调用 shell 命令,例如

    */10 * * * * /home/someuser/some_script.sh >/home/someuser/some_script.cronoutput 2>&1
    

    2) some_script.sh 的内容;确保设置了执行位

    #!/bin/sh
    export MAILTO=someuser  
    export CLASSPATH="/home/someuser/test.jar:/usr/share/java/jdom.jar:/usr/share/java/mysql-connector-java.jar"  
    
    cat -A /home/someuser/somefile.txt | java -classpath "$CLASSPATH" com.test.Main  >/home/someuser/output.txt
    

    【讨论】:

    • 此外,您可能需要在脚本中指定/bin/cat 而不仅仅是cat。由 cron 运行的脚本通常没有设置环境(包括 $PATH),但脚本本身明确包含的环境除外。
    • 添加 /bin/cat 有帮助!谢谢大家 ;) 很抱歉这么菜鸟 :D
    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多