19

Is there an environment variable to set the temporary directory on debian based systems?

I have a java applet that uses that environement variable and it's getting confused when launching two instances of the same applet.

1

8 Answers 8

21

I am unsure if the java applet will actually look at the environment variables before it starts, but what you can do it edit /etc/profile and add the following lines:

if [[ -O /home/$USER/tmp && -d /home/$USER/tmp ]]; then
        TMPDIR=/home/$USER/tmp
else
        # You may wish to remove this line, it is there in case
        # a user has put a file 'tmp' in there directory or a
        rm -rf /home/$USER/tmp 2> /dev/null
        mkdir -p /home/$USER/tmp
        TMPDIR=$(mktemp -d /home/$USER/tmp/XXXX)
fi

TMP=$TMPDIR
TEMP=$TMPDIR

export TMPDIR TMP TEMP

To make it a true tmp directory (as in the files go away when the session is ended, you'll want to edit the user's .bash_logout as well as the skeleton .bash_logout (/etc/skel/.bash_logout) to include the following:

if [ -O $TMPDIR && -d $TMPDIR ]; then
        rm -rf $TMPDIR/*
fi

The logout portion is dangerous is the variable doesn't get set and your logged in as root! I wouldn't add this to the root account or anyone that is a member of the wheel group! Proceed at your own caution.

3
  • 3
    I wouldn't put the cleanup into .bash_logout at all - what happens if they open up two sessions and log out of one? Use tmpwatch. :)
    – MikeyB
    Oct 10, 2009 at 4:19
  • That is a much better cleanup solution, thanks for adding that. :) Oct 16, 2009 at 12:34
  • NB: the tmpwatch command does not exists on BSD (e.g. OSX) version of unix, for anyone going for portability. My CentOS boxes have it though. :)
    – Cometsong
    Nov 29, 2018 at 14:44
9

The file you are looking for is:

/etc/environment

You have to set the TEMP variable like:

TEMP=/home/user/tmp
2
  • 6
    And even export TEMP=/home/user/tmp Jun 27, 2014 at 15:06
  • @Fedir that is in the shell, yes.
    – cstamas
    Jul 2, 2014 at 19:33
4

If you want /home/user/tmp to be cleaned on reboot, I suggest you add an @reboot job to the user's personal crontab.

2

Java uses the system property java.io.tmpdir to configure the temporary directory. A reasonable JRE will set that to a sensible value based on the system if not explicitly specified.

2

For me this worked when i was trying to install a jar file using java.

export _JAVA_OPTIONS="-Djava.io.tmpdir=/apps/prod/tmp"

I use a Red Hat Linux. /apps/prod/tmp being the new folder.

1

In C, I would use the tmpfile() call for a posix system, which would avoid the collision. So I would look for a similar Java call before trying to implement it myself, if you haven't already.

3
  • This assumes he is the one developing the application Oct 9, 2009 at 15:00
  • TrueDuality: Ah, my mistake Oct 9, 2009 at 15:17
  • 1
    Java has java.io.File.createTempFile. Now with added secure RNG. Oct 13, 2009 at 0:20
1
export TMPDIR=/path/to/desired/tmp

Use that before running desired command.

2
  • 1
    This will only print the text TMPDIR=/path/to/desired/tmp. Nothing else. Feb 25, 2022 at 14:16
  • Sorry about that. Had to be export not echo. It really saved me a ot of pain. Some process was writing extremely large files to /tmp and I didn't want to allocate the space just for it. Or, reboot.
    – nyxee
    Mar 3, 2022 at 7:34
0

https://support.oracle.com/epmos/faces/SearchDocDisplay?_adf.ctrl-state=1dab2wir99_201&_afrLoop=305930829027924#SYMPTOM

export _JAVA_OPTIONS="-Djava.io.tmpdir=<local path>"

Eg:

export _JAVA_OPTIONS="-Djava.io.tmpdir=/home/user/tmp"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.