"ps aux | grep utilities"の結果をテキストファイルにパイプしてテキストファイルをパイプして、Webサービスがファイルを読み込んで結果をWebアプリケーションに表示できるようにするシステムスクリプトがあります。ここで ps auxを解析するPHP | grep ...結果
は、生の結果の一例である:user 12052 0.2 0.1 137184 13056 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust1 cron
user 12054 0.2 0.1 137184 13064 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust3 cron
user 12055 0.6 0.1 137844 14220 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust4 cron
user 12057 0.2 0.1 137184 13052 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust89 cron
user 12058 0.2 0.1 137184 13052 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust435 cron
user 12059 0.3 0.1 135112 13000 ? Ss 10:00 0:00 php /home/user/public_html/utilities/runProcFile.php cust16 cron
root 12068 0.0 0.0 106088 1164 pts/1 S+ 10:00 0:00 sh -c ps aux | grep utilities > /home/user/public_html/logs/dashboard/currentlyPosting.txt
root 12070 0.0 0.0 103240 828 pts/1 R+ 10:00 0:00 grep utilities
私のPHPスクリプトは、このテキストファイルを解析すると、私は、次の(単なる例)を抽出する必要があります。
cust1
cust3
cust4
cust89
cust435
cust16
私が持っていますさまざまな不器用な方法を試したが、何もうまくいかないようだ。私が以下に列挙したやり方はうまくいくが、行の "スペース"の数が変化して爆発するため、たまにゴミ箱をつかむこともある。
public function showProcesses() {
$lines = file(DIR_LOGGER_ROOT . "dashboard/currentlyPosting.txt");
$results = array();
$i = 0;
foreach($lines as $line) {
if (preg_match("/php/i", $line)) {
$userProcess = explode(" ", $line);
if($userProcess[29] != "0:00" && strlen($userProcess[29]) < 20) {
$results[$i] = $userProcess[29];
$i++;
}
}
}
return $results;
}
あなたの中には、このような優雅なソリューションを投稿できますか?私は、より良いやり方を学び、指導に感謝しています。
あなたがこれを行うには、コマンドラインアプリケーションを書いている場合は、私はPerlのような文字列処理や正規表現に適した言語を使用することをお勧め:
次に、あなたが持つ最後から二番目のアイテムを得ることができます。おそらくCPAN上で何かを見つけて、プロセステーブルに直接アクセスすることもできます。たとえば、http://search.cpan.org/dist/Proc-ProcessTable/ –
のようにデータが収集され、システムスクリプトからテキストファイルに書き込まれます。私のWebアプリケーションからexecとrootを使わずにテキストファイルをWebアプリケーションにアクセスできるようにします。結果を解析するのはWebアプリケーション自体のためであり、PHPは理にかなっています。 –