[Rd] tempdir() may be deleted during long-running R session

Mikko Korpela mikko.korpela at helsinki.fi
Fri Apr 21 14:31:35 CEST 2017


On 21/04/17 14:42, Joris Meys wrote:
> In defense of the OP: I would have checked ?tmpdir and missed the
> information in the manual as well. On the help page there's ample
> information on the underlying processes that create the dir on multiple
> platforms. I think adding the last two sentences of prof. Ripley's quote as
> a warning to the help page, would be worth the effort.
>
> I do wonder though why you would run something that lasts 10 days and still
> rely on something that is called a "temporary" directory.

For me, intuitively, the temporary directory is a place for temporary 
files. I mean, the directory itself does not seem as temporary as the 
files in it. I think this is not entirely unsupported by the wording in 
?tempdir: "per-session temporary directory". I now understand that 
"per-session" rather means that tempdir() returns a constant value 
during a single R session, but the directory itself may disappear due to 
things not controlled by R (documented elsewhere as pointed out by Prof 
Ripley).

- Mikko

> Best regards
> Joris
>
> On Fri, Apr 21, 2017 at 1:03 PM, Prof Brian Ripley <ripley at stats.ox.ac.uk>
> wrote:
>
>> From the R-admin manual §5:
>>
>> 'Various environment variables can be set to determine where R creates its
>> per-session temporary directory. The environment variables TMPDIR, TMP and
>> TEMP are searched in turn and the first one which is set and points to a
>> writable area is used. If none do, the final default is /tmp on Unix-alikes
>> and the value of R_USER on Windows. The path should be an absolute path not
>> containing spaces (and it is best to avoid non-alphanumeric characters such
>> as +).
>>
>> Some Unix-alike systems are set up to remove files and directories
>> periodically from /tmp, for example by a cron job running tmpwatch. Set
>> TMPDIR to another directory before starting long-running jobs on such a
>> system.'
>>
>>
>> On 21/04/2017 11:49, Mikko Korpela wrote:
>>
>>> Temporary files not accessed for a long time are automatically removed
>>> in some Linux distributions and probably other operating systems too,
>>> depending on system configuration. This may affect the per-session
>>> temporary directory, the path of which is returned by tempdir(). I think
>>>
>>
>> Not for those who follow the manual and know that sysadmnins have enabled
>> such a script.
>>
>>
>> it would be nice if R automatically tried to recreate a missing
>>> tempdir() but this could have some performance implications.
>>>
>>> I ran the same test (below) on R 3.3.3 patched, R 3.4.0 beta, and
>>> R-devel, all at r72499 (2017-04-09) and compiled by myself. The results
>>> from the test were practically identical on all of those versions, the
>>> test platform being Ubuntu 14.04.5 LTS. This system is configured for a
>>> /tmp cleanup threshold of 7 days of inactivity (which is the default).
>>> After a wait of roughly 10 days, the R temporary directory had been
>>> deleted by an automatic cleanup procedure, and a call to `?` failed.
>>> This StackExchange question has some answers about the Ubuntu /tmp
>>> cleanup practice: https://askubuntu.com/q/20783
>>>
>>> a <- print(tempdir())
>>> # [1] "/tmp/user/1069138/RtmpGc9M5z"
>>> dir.exists(a) # TRUE
>>> # [1] TRUE
>>> Sys.time()
>>> # [1] "2017-04-10 16:00:30 EEST"
>>> ## Wait for one week (Ubuntu 14.04.5 LTS)
>>> print(Sys.time()); ?regex
>>> # [1] "2017-04-20 14:17:29 EEST"
>>> # Error in file(out, "wt") : cannot open the connection
>>> # In addition: Warning message:
>>> # In file(out, "wt") :
>>> #   cannot open file '/tmp/user/1069138/RtmpGc9M5z/Rtxt3dbb65870ad4': No
>>> such file or directory
>>> b <- print(tempdir())
>>> # [1] "/tmp/user/1069138/RtmpGc9M5z"
>>> identical(a, b)
>>> # [1] TRUE
>>> dir.exists(b)
>>> # [1] FALSE
>>>
>>>
>>
>> --
>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>> Emeritus Professor of Applied Statistics, University of Oxford
>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>



More information about the R-devel mailing list