在临时文件夹中创建了很多临时 magick 文件
lot of temp magick files created in temporary folder
我正在使用 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 处理程序中使用以下两行。原因是我找不到任何解释。此外,go http 处理程序工作正常。那么,这些陈述的目的是什么?
imagick.Initialize()
defer imagick.Terminate()
我假设有一些理由将它们包含在代码中。所以,在 go 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) {
}
调用 ImageMagick 线程应自动清理临时/中间文件。您描述的模式行为提示使用 ImageMagick 的应用程序中存在错误。
我会建议...
- 检查应用程序的错误日志。
- 评估调用代码报错
- 确保调用正确的
imagick.Initialize
和 imagick.Terminate
例程
如果其他方法都不起作用,请使用环境变量 MAGICK_TMPDIR
控制将 imagemagick 工件写入的位置。
更新
imagick.Initialize
包装底层 MagickCoreGenesis
, and imagick.Terminate
the 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
}
实际上它应该包含在 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) {
}
您可以设置 cron
在一天或一小时后运行,清理所有临时 magick
文件的临时文件夹。你也可以使用这个在线命令来删除所有的魔法文件
sudo find /tmp/ -name "magick-*" -type f -delete
我正在使用 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 处理程序中使用以下两行。原因是我找不到任何解释。此外,go http 处理程序工作正常。那么,这些陈述的目的是什么?
imagick.Initialize()
defer imagick.Terminate()
我假设有一些理由将它们包含在代码中。所以,在 go 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) {
}
调用 ImageMagick 线程应自动清理临时/中间文件。您描述的模式行为提示使用 ImageMagick 的应用程序中存在错误。
我会建议...
- 检查应用程序的错误日志。
- 评估调用代码报错
- 确保调用正确的
imagick.Initialize
和imagick.Terminate
例程
如果其他方法都不起作用,请使用环境变量 MAGICK_TMPDIR
控制将 imagemagick 工件写入的位置。
更新
imagick.Initialize
包装底层 MagickCoreGenesis
, and imagick.Terminate
the 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
}
实际上它应该包含在 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) {
}
您可以设置 cron
在一天或一小时后运行,清理所有临时 magick
文件的临时文件夹。你也可以使用这个在线命令来删除所有的魔法文件
sudo find /tmp/ -name "magick-*" -type f -delete