bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: delete and redirection


From: Micah Cowan
Subject: Re: delete and redirection
Date: Mon, 04 Aug 2008 18:42:04 -0700
User-agent: Thunderbird 2.0.0.16 (X11/20080724)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Fabien Carmagnac wrote:
> Hello,

Hi. Your question (and its potential solution) isn't really topical for
this forum (which is for discussion of the GNU coreutils software
package). It involves the use of a part of that software (rm, and
apparently bash), but it doesn't have much in particular to do with it.
If you continue to have problems after the explanation and suggestion
here, you should probably take it to a forum dedicated to support for
your system.

> I have a problem when I remove a file which is a redirection of the std 
> output of a process:
> 
> I launch a process and redirect output to file:
> address@hidden ./myprocess &> mylog.log
> 
> Then (after a few days/weeks), I remove the mylog.log file, hoping the system 
> will create a new fresh one.
> address@hidden rm -f mylog.log
> 
> But the system never created again the file.

Why would the system create a fresh one? You asked it to get rid of it.

> After a few days, df gives 100% disk used but kdirstat (a gui tool to watch 
> size of each folder recursivly), says 20%used.

The process is still writing to the file, even though it doesn't have a
directory entry ("link") anywhere. So long as a process has it open, a
file exists until both the processes that have it open are terminated,
_and_ it no longer has any links in the filesystem.

> Then, if I reboot, df says 20%used also.
> 
> So my question is : is there a way to rotate/remove/resize logs without:
>   - reboot computer
>   - stop process flishing in it 

Nope.

What I'd suggest is have the process's output pipe to a program whose
responsibility is to read a line, open the log file, append the line to
it, then close it.

Something like:

  #!/bin/sh
  set -u
  : "$1"
  IFS=
  while read -r LINE
  do
    echo "$LINE" >> "$1"
  done

Then you would run ./myprocess | /path/to/script mylog.log

Removing or rotating the mylog.log file would then still permit the next
line to appear in a new mylog.log.

- --
Micah J. Cowan
Programmer, musician, typesetting enthusiast, gamer.
GNU Maintainer: wget, screen, teseq
http://micah.cowan.name/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIl6/s7M8hyUobTrERAgZXAJ4mOsaaldPmHjdCYz6TqbcSeEfxOQCdE0/n
jkhX9PY1ndlVdUexphemVVo=
=75Oe
-----END PGP SIGNATURE-----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]