我编写了一个自定义 Java 服务器。我/etc/init/myservice.config
在启动时使用 Upstart() 运行它java -jar myservice.jar
。
java 进程用于System.out.println
写入各种日志消息。
我希望能够从远程 ssh 会话连接到它并查看输出。
更新:我想做到这一点,而无需创建、轮换、管理日志文件的麻烦。
我看过很多帖子,包括: 如何在另一个 bash 会话中查看正在运行的进程的输出?
我已经尝试过了cat
,tail -f /proc/<procid>/fd/0 /proc/<procid>/fd/1 /proc/<procid>/fd/2
所有输出都是空白。
这一切都是作为root
我知道还有更多的事情可以尝试,但我很怀疑,因为 fd 是空白的(或者至少对我来说)。
我正在运行 Ubunutu Server 14.04 LTS,Oracle Java 8
更新:想要尝试屏幕,但我发现它并不完全适合这个...... 如何使用非特权用户的 upstart 作业启动屏幕会话?
答案1
我能想到的最简单的方法是将输出重定向到这样的文件:
java -jar myservice.jar >> /var/tmp/myservice
如果有大量输出,日志可能会变大,因此您可能需要cron
每隔几个小时左右通过任务来修剪它,或者轮换日志。
确保它System.out.println
打印输出,而不是System.err.println
.如果是err
,则需要重定向错误流。
java -jar myservice.jar 2>> /var/tmp/myservice
答案2
java -jar myservice.jar > mylogfile.txt 2>&1
这2>&1
意味着您还将程序中的错误记录到mylogfile.txt