在临时文件夹中创建的很多临时魔法文件

时间:2016-02-22 10:09:48

标签: imagemagick go-imagick

我正在使用imagick 库来调整和处理http处理程序中的图像。哪个不在/tmp文件夹中写任何内容。但是因为我可以在该文件夹中创建大量这些文件,并且它的大小每天都在增长,目前它正在消耗大约90%的分区大小。此外,我也无法阅读他们的内容。那么,为什么要创建这些文件,一段时间后它们会被删除,还是我需要手动删除它们。

    -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

修改:

我在http Handler中没有使用以下两行。原因是我无法找到任何解释。而且,go http处理程序工作正常。那么,这些陈述的目的是什么?

imagick.Initialize() 
defer imagick.Terminate()

我假设有一些理由将它们包含在代码中。所以,在去http处理程序。它应该包含在func main()内还是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) {

}

3 个答案:

答案 0 :(得分:1)

临时/中间文件应该由调用ImageMagick线程自动清理。您描述的模式行为使用ImageMagick提示应用程序中的错误。

我建议......

  1. 检查应用程序的错误日志。
  2. 评估呼叫代码的错误报告。
  3. 确保imagick.Initialize& imagick.Terminate例程被称为
  4. 如果没有其他工作,请使用环境变量MAGICK_TMPDIR来控制imagemagick工件的写入位置。

    更新

    imagick.Initialize包含基础MagickCoreGenesisimagick.Terminate MagickCoreTerminus例程。它们对于管理ImageMagick运行的环境非常重要。应该在将处理任何ImageMagick任务的工作线程上调用它们,因此在您的情况下,serveHTTP方法。但是,对每个HTTP请求执行此类例程并不是最佳的,并且应该评估其他条件 - 如果可能的话。

    func serveHTTP(w http.ResponseWriter, r *http.Request) {
       // if request will do image work
       imagick.Initialize() 
       defer imagick.Terminate()
       // ... image methods ...
       // end if
    }
    

答案 1 :(得分:1)

您可以设置一个cron运行一天或一小时后清理所有临时magick文件的临时文件夹。您可以使用此on line命令删除所有magick文件

sudo find /tmp/ -name "magick-*" -type f -delete

答案 2 :(得分:0)

实际上它应该包含在func main()而不是 func serveHTTP()。对于长时间运行的应用程序,它应该被调用一次,它解决了我的问题。

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) {

}