繁体   English   中英

无法在 cgi 脚本中运行 find 和 xargs

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM