开发者社区 问答 正文

java重定向的日志格式为二进制文件导致清空失败

请问各位大佬,在阿里云服务器上nohup java -Xms512m -Xmx1024m -jar spring.jar > /opt/logs/spring.log 2>&1 &命令启动的java进程,刚开始启动时,spring.log日志文件的格式为text/plain,过一段时间后再查看格式变成了application/octet-stream; charset=binary,这样就导致如果java进程在运行,我通过> spring.log是清空不了日志文件的,请问这个怎么解决?备注:在公司的物理服务器上日志格式一直是text/plain,不会出现这个问题。

展开
收起
游客fmx43fu5cxtma 2021-06-22 17:46:11 805 分享 版权
阿里云 AI 助理回答

你好!在阿里云服务器上使用nohup命令来后台运行Java应用是一个常见的做法,尤其是当你希望程序在后台持续运行,即使你关闭了SSH会话也不会中断。你的命令格式基本是正确的,它做了以下几件事:

  1. nohup:让命令忽略挂断(HUP)信号,使得进程在用户退出终端后仍能继续运行。
  2. java -Xms512m -Xmx1024m:设置Java虚拟机的初始堆内存为512MB(-Xms512m),最大堆内存为1024MB(-Xmx1024m)。这有助于控制应用的内存使用。
  3. -jar spring.jar:指定要运行的Spring Boot应用程序的jar文件。
  4. > /opt/logs/spring.log:将标准输出(stdout)重定向到/opt/logs/spring.log文件中,这样你的应用日志就会被记录在这里。
  5. 2>:这里似乎缺少了一个重定向的目标路径。正常情况下,你应该指定一个文件来接收错误输出(stderr)。例如,如果你想把错误信息也记录在同一日志文件中,可以使用 2>&1 来合并标准错误和标准输出,或者指定一个单独的文件来存放错误日志,如 2>/opt/logs/spring.err.log

所以,如果你希望同时捕获标准输出和标准错误到同一个文件,完整的命令应该是:

nohup java -Xms512m -Xmx1024m -jar spring.jar > /opt/logs/spring.log 2>&1 &

这里的&符号放在最后,用于将整个命令放入后台执行。

记得确保 /opt/logs/ 目录存在,并且你的用户有权限写入该目录。如果需要,可以通过 mkdir -p /opt/logs/ 创建目录,以及通过 chmodchown 调整权限。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答