Ho uno script di sistema che esegue e convoglia i risultati di "ps aux | grep utilities" in un file di testo e rimuove il file di testo in modo che il servizio Web possa leggere il file e visualizzare i risultati nella mia app web.php per analizzare ps aux | grep ... results
Ecco un esempio dei risultati grezzi:
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
Come il mio script php analizza questo file di testo, ho solo bisogno di estrarre i seguenti (solo un esempio):
cust1
cust3
cust4
cust89
cust435
cust16
ho provato un certo numero di modi diversi maldestri e niente sembra funzionare bene. Il modo in cui ho elencato di seguito funziona, ma a volte afferra anche i rifiuti perché il numero di "spazi" in una linea esplode in base alle modifiche.
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;
}
Alcuni di voi potrebbero postare soluzioni eleganti per questo? Sto cercando di imparare modi migliori di fare le cose e apprezzerei la guida.
Se state scrivendo un'applicazione a riga di comando per fare questo, io suggerisco di usare un linguaggio più adatto per la gestione delle stringhe e le espressioni regolari come il Perl. Probabilmente potresti anche trovare qualcosa su CPAN per accedere direttamente alla tabella dei processi, come http://search.cpan.org/dist/Proc-ProcessTable/ –
i dati vengono raccolti e scritti nel file di testo da uno script di sistema. rende accessibile il file di testo alla mia app Web senza utilizzare exec e root dalla mia app Web. ma analizzare i risultati è per l'app Web stessa, quindi php ha senso. –