bash - 无法在 cgi 脚本中运行 find 和 xargs
问题描述
我有一个 cgi 脚本,它从 html javascript 获取请求并运行一些系统命令,然后响应回 javascript。现在在我的 cgi 脚本和 set 函数之一中,我有以下行代码。
$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
在 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
很重要,而不是将其发送到 void,可以通过替换/dev/null
日志文件的位置将其通过管道传输到文件,它应该存储在其中。
在这种情况下,日志文件是每次运行时都会覆盖。如果这不应该发生,请使用&>>
而不是&>
附加到日志文件(在这种情况下不要忘记不时轮换日志文件)。
推荐阅读
- scala - Apache Ignite 使用 sbt 与 scala-spark 集成
- java - 用 camel_case_01 替换 camelCase01
- java - 关于jar文件的问题和疑问
- javascript - 如何允许用户将文件从 html FileAPI 沙箱移动/下载到他的首选位置?
- node.js - Material-ui AppBar。滚动时更改颜色。反应
- django - 如何在 django rest 框架的 serilaizer 中获取 lookup_url_kwarg
- c# - PHP 的 utf8_decode 和 C# 的 Encoding.UTF8.GetString 为相同的输入返回不同的输出
- python-3.x - 在 Python 3 中重新声明具有相同名称的类
- vba - 将一个帐户客户端规则复制到所有客户端规则
- draftjs - 行间距反应草稿所见即所得