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