[英]Unable to run find and xargs in a cgi script
我有一个 cgi 脚本,它从 html javascript 获取请求并运行一些系统命令,然后响应回 javascript。 现在在我的 cgi 脚本和一组 function 中,我有以下代码行。
$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”只是挂起,甚至不会返回任何错误。 我在这里是否缺少任何东西,或者是否有任何其他方法可以实现相同的目标。 谢谢你。
备查:
这里的问题是shred
的 output 在 cgi 执行中阻塞或填满了一些缓冲区或 pipe。 由于shred
没有“安静”标志(根据手册页),解决方案是像这样运行它,将 output 重定向到/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
的 output 很重要,则可以通过将/dev/null
替换为日志文件的位置来将其通过管道传输到文件,而不是将其发送到 void,它应该存储在其中。
在这种情况下,每次运行都会覆盖日志文件。 如果这不应该发生,请使用&>>
而不是&>
到 append 到日志文件(在这种情况下不要忘记不时轮换日志文件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.