使用“-exec”查找但有延迟

Gil*_*lou 3 find

我有这段代码来优化目录中所有图像的图像大小/dir

find /dir/ -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \;
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,它会消耗大量服务器 CPU。所以我想知道:我是否可以在每个之间添加延迟exec?例如,我希望每次exec调用每个图像之间有 100 毫秒的延迟,这样 CPU 就不会变得非常繁忙。

你有什么建议?我的服务器运行的是 Centos 8。

eft*_*ft0 10

-exec您还可以使用 more s添加更多命令

find /dir/ -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \; -exec sleep 0.1 \;
Run Code Online (Sandbox Code Playgroud)

但作为一般规则,如果您想让它充分工作但对其他进程友好,那么使用nice非常简单:

nice find /dir/ -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \;
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 8

这就是创建诸如nice和 之类的命令的原因。ionice

  • nice可用于降低进程CPU优先级
  • ionice可用于降低进程IO优先级

这些的组合可以确保您的进程仅占用可用处理器和 IO 功能的一小部分。此示例将进程 IO 推入“尽力而为”类的最低端:

ionice -c2 -n7 find...
Run Code Online (Sandbox Code Playgroud)

更改-c2-c3以确保您的进程仅在 IO 子系统空闲时运行。

此示例将处理器配额降低到低优先级:

nice -n12 find...
Run Code Online (Sandbox Code Playgroud)

更改-n12-n19尽可能最低的优先级。

将它们组合起来以获得最大效果:

ionice -c2 -n7 nice -n12 find...
Run Code Online (Sandbox Code Playgroud)