关于nohup重定向日志按日期区分文件(未解决)

启动服务的脚本:

#!/bin/bash
cd `dirname $0`
source start_base
#make sure classpath .. is ahead of the lib path
nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $LIB_JARS:$APP_LIB_JARS:. $CONTAINER_MAIN > $STDOUT_FILE 2>&1 &
echo "Please check the STDOUT file: $STDOUT_FILE"


由于stdout.log文件过大,只有重启服务才会刷新文件,现在试图在服务不重启的情况下,把该文件按照日期或者文件大小来分成不同的文件,最终没有成功

方案1:使用crontab,每天把日志文件复制一份,然后删除日志文件,让程序自动新建一个日志文件往里写日志,或者手工新建一个日志文件让程序往里写。方案失败,因为Linux只认服务一开始创建的那个文件,删除之后程序输出日志不会再新建一个日志文件,手工新建日志文件之后也不再往里面写日志。

方案2:使用crontab,每天把日志文件复制一份,然后把现有日志文件内容清空,让程序继续往文件里写日志。方案失败,因为未停止的服务的日志在清空的时候,文件占用的磁盘空间不会被释放。比如,日志文件有3个G,清空日志文件,文件变为0kb,但新的日志再写入的时候会从3G之后开始写,文件大小立刻会变回3个G,日志文件就会继续增大,不能满足要求。

方案3:修改nohup命令,再命令最后加参数,让程序自动按照时间或者文件大小区分日志文件。方案失败,添加的参数未能达到效果,该日志文件只在程序第一次启动时生效,以后的时间未能按照设置的内容区分开文件,原因未知


用到的相关命令如下:


清空日志文件的命令:

1.: > filename           #其中的 : 是一个占位符, 不产生任何输出.
2.> filename
3.echo “” > filename
4.echo /dev/null > filename
5.echo > filename


nohup按照时间或者文件大小区分日志文件的命令(网上抄的):

每天写一个日志: nohup ./startWebLogic.sh | /apache/bin/rotatelogs ./logs/nohuplog 86400

每200M写一个日志: nohup ./startWebLogic.sh | /apache/bin/rotatelogs ./logs/nohuplog 200M

每200M写一个日志,按时间日期命令名: nohup ./startWebLogic.sh | /apache/bin/rotatelogs ./logs/nohup_%Y%m%d%H%M.log200M


以上方法我都试过了,没有用

2017年11月30日更新=============================================================

启动后的进程,可以看到该进程的文件描述符

文件描述符0,1,2分别对应的是标准输入,标准输出,错误输出。

nohup启动脚本最后的 $CONTAINER_MAIN > $STDOUT_FILE 2>&1 & 表示标准输出到某个文件。

文件描述符在Linux系统中以文件的形式存放,位置在/proc/进程pid/fd目录下。

在该目录下2指向的就是输出的文件,看起来是类似一种软链接的形式存放的:

l-wx------ 1 root root 64 Nov 27 17:13 2 -> /data/bootstrap/logs/stdout.log

这个文件描述符就是进程往目标文件输出日志的标识。

关于这个文件描述符:

1,指向的文件位置不能修改,即使root账号也改不了。

2,目标文件只要被删除,文件描述符的指向就会失效(类似没有目标文件的软链接),而且目标文件重建之后,这个链接不会重新生效,除非重启进程。


推测:

Linux有个dup命令和dup2命令,这个命令貌似能改变进程的文件描述符指向的文件位置,从而解决问题。

但是这俩命令我不会用,可能有用。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值