无法 运行 在 cgi 脚本中查找和 xargs

Unable to run find and xargs in a cgi script

我有一个 cgi 脚本,它从 html javascript 获取请求并运行一些系统命令,然后响应返回给 javascript。 现在在我的 cgi 脚本和设置函数之一中,我有以下代码行。

$shred1 = `/usr/bin/find /usr/demo/logs -type f | xargs shred -uvz -n 5`;
$shred2 = `/usr/bin/find /var/lib/pgsql/data -type f | xargs shred -uvz -n 5`;

第一行,即“shred1”成功执行,但第二行“shred2”只是挂起,甚至不会 return 任何错误。有没有我在这里遗漏的东西,或者有没有其他方法可以达到同样的目的。 谢谢。

供日后参考:
这里的问题是 shred 的输出在 cgi 执行中阻塞或填满了一些缓冲区或管道。由于 shred 没有“安静”标志(根据手册页),解决方案是 运行 这样,将输出重定向到 /dev/null:

$shred1 = `/usr/bin/find /usr/demo/logs -type f | xargs -I{} bash -c "shred -uvz -n 5 {} &> /dev/null"`;
$shred2 = `/usr/bin/find /var/lib/pgsql/data -type f | xargs -I{} bash -c "shred -uvz -n 5 {} &> /dev/null"`;

如果问题可能来自被粉碎的文件太多,请使用 -n-P 标志来限制一次被粉碎的文件数量。

如果 shred 的输出很重要,则可以通过将 /dev/null 替换为 log-file, 应该存放在.
在这种情况下,log-file 会在每个 运行 上被覆盖。如果不应该发生这种情况,请使用 &>> 而不是 &> 附加到 log-file (在这种情况下不要忘记不时旋转 log-file )。