【问题标题】:nohup create new files nohup.out by daynohup 按天创建新文件 nohup.out
【发布时间】:2014-12-12 17:55:10
【问题描述】:

我不知道我是否可以用 nohup 做到这一点,但这是个问题....我有这个命令:

nohup java -XX:MaxHeapFreeRatio=70 -Xmx2048M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof -jar $iscsiJar &

并且我希望当一天更改时,我保存前一天 nohupYYYYMM01.out 并创建另一个文件 nohupYYYYMM02.out ,当然,不会杀死我的进程。 =)

有可能吗,如何在 shell 脚本中编程?

非常感谢!

【问题讨论】:

  • 只需使用logrotate
  • @anubhava 我不确定java 是否足够聪明,可以在logrotate 请求时开始记录到不同的文件,除非它被配置为重新启动程序,这似乎是 OP 无法接受的...
  • logroate 中有一个copytruncate 选项,它在创建副本后将原始日志文件截断到位,而不是移动旧日志文件并选择性地创建新日志文件。当某些程序无法被告知关闭其日志文件时可以使用它,因此可能会永远继续写入(附加)到前一个日志文件。
  • @anubhava 对,这是等式的一部分,但我也看到这会导致文件稀疏,因为当文件被截断时,写入偏移量不会在父进程中更新。不过,这可能是可以接受的,我不记得究竟是在什么条件下发生的......

标签: linux shell nohup


【解决方案1】:

我认为一种解决方案是使用Supervisord

下面是 /etc/supervisord.conf 的示例

...
[program:coherence]
command=java -XX:MaxHeapFreeRatio=70 -Xmx2048M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof -jar $iscsiJar &
directory=/u01/jdk
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/java.err.log
stdout_logfile=/var/log/java.out.log
user=oracle
stopsignal=KILL
killasgroup=true
stopasgroup=true

使用 supervisord,您可以像服务一样停止/启动这个进程

【讨论】:

  • 很好,谢谢。我用 testSupervisor.sh 做了这个简单的配置,它可以工作。现在我将尝试使用 java [program:testSupervisor] command=/root/testSupervisor.sh autostart=true autorestart=true stdout_logfile_maxbytes=3KB stderr_logfile_maxbytes=3KB stderr_logfile=/root/err.log stdout_logfile=/root/out.log跨度>
  • 您好,如何设置supervisord打开文件的限制?
  • 没关系,我在这里找到blog.cesarcd.com/2014/10/…
猜你喜欢
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2019-01-17
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多