Reputation: 5397
I am using the imagick library to resizing and cropping the images in a http handler. Which doesn't write anything in /tmp
folder. But as i can a lot of these files are being created in that folder and it's size is growing on a daily basis and currently it's consuming around 90% of partition size. Moreover, i am not able to read their content also. So, why these files are being created and would they be delete after a while or do i need to manually delete them.
-rw------- 1 ubuntu ubuntu 16M Feb 22 09:46 magick-d6ascKJV
-rw------- 1 ubuntu ubuntu 16M Feb 22 09:46 magick-46ccZIfq
-rw------- 1 ubuntu ubuntu 1.8M Feb 22 09:47 magick-vUET7vyh
-rw------- 1 ubuntu ubuntu 1.8M Feb 22 09:47 magick-OLkGWTX8
-rw------- 1 ubuntu ubuntu 15M Feb 22 09:48 magick-LNMV7YvE
-rw------- 1 ubuntu ubuntu 16M Feb 22 09:49 magick-0LMYt6Kc
-rw------- 1 ubuntu ubuntu 16M Feb 22 09:50 magick-ceNxX5CY
-rw------- 1 ubuntu ubuntu 16M Feb 22 09:50 magick-nQ1M3y6I
Edit :
I am not using the following two lines in my http Handler. Reason being i couldn't find any explanation to do so. Moreover, the go http handler works fine. So, what is the purpose of these statements?
imagick.Initialize()
defer imagick.Terminate()
I am assuming there would be some reason to include them in the code. So, in go http handler. Where it should be included inside func main()
or inside serveHTTP
?
func main() {
myMux := http.NewServeMux()
myMux.HandleFunc("/", serveHTTP)
if err := http.ListenAndServe(":8085", myMux); err != nil {
logFatal("Error when starting or running http server: %v", err)
}
}
func serveHTTP(w http.ResponseWriter, r *http.Request) {
}
Upvotes: 1
Views: 6129
Reputation: 4422
You can set a cron
which runs in a day or after an hour cleaning up your temp folder for all temporary magick
files. you can use this on line command to delete all magick files as well
sudo find /tmp/ -name "magick-*" -type f -delete
Upvotes: 1
Reputation: 5397
Actually it should be included in the func main()
not in the
func serveHTTP()
. It is meant to be called once for a long running application and it solved my problem.
func main() {
imagick.Initialize()
defer imagick.Terminate()
myMux := http.NewServeMux()
myMux.HandleFunc("/", serveHTTP)
if err := http.ListenAndServe(":8085", myMux); err != nil {
logFatal("Error when starting or running http server: %v", err)
}
}
func serveHTTP(w http.ResponseWriter, r *http.Request) {
}
Upvotes: 0
Reputation: 24419
Temporary / intermediate files should be automatically cleaned-up by the calling ImageMagick thread. The pattern-behavior you are describing hints at a bug in the application using ImageMagick.
I would suggest...
imagick.Initialize
& imagick.Terminate
routines are calledAnd if nothing else works, use the environment variable MAGICK_TMPDIR
to control where the imagemagick artifacts are written to.
The imagick.Initialize
wraps the underlying MagickCoreGenesis
, and imagick.Terminate
the MagickCoreTerminus
routine. They are important for managing the environment in which ImageMagick operates. They should be called on the worker thread that will handle any ImageMagick tasks, so in your case, serveHTTP
method. BUT it would not be optimal to perform such routines with every HTTP request, and an additional condition should be evaluated -- if possible.
func serveHTTP(w http.ResponseWriter, r *http.Request) {
// if request will do image work
imagick.Initialize()
defer imagick.Terminate()
// ... image methods ...
// end if
}
Upvotes: 1