所以我一直在根据ps faux的输出进行逆向工程。我已经让它主要用于工作,但是我遇到了它如何计算PHP进程的问题。例如,这是我试图复制的脚本的输出:
Top SQL
Apache statistics: CPU %: 0 | Mem %: 1.8
Total PHP statistics: CPU %: 0 | Mem %: 83.9
Top PHP Users
391 user -> CPU %: 0 | Mem %: 83.9
Top PHP Scripts
307 /home/user/public_html/gg/ajax_calls2.php -> CPU %: 0 | Mem %: 70.7
36 /home/user/public_html/gg/support/crm/index.php -> CPU %: 0 | Mem %: 5
8 /home/user/public_html/gg/support/advanced_search.php -> CPU %: 0 | Mem %: 1.5
我最麻烦的是为每个用户抓取正在运行的php脚本,然后计算每个进程并计算每个进程的CPU / MEM使用情况。到目前为止我写的AWK语句只为每个用户输出一个脚本,而不是为每个用户输出所有脚本。
这是我到目前为止所做的:
变量声明:
function join2 { local IFS="$1"; shift; echo "$*"; };ix="0"; ixx="5"; count="0"; count2=$(ps faux | egrep -w 'usr/bin/php|/opt/php*/bin/'|awk '{print $1, $3, $4,$14, $15}' | wc -l);
首先,我将ps faux中的所有PHP进程存储在一个数组中:
initialARRAY=($(ps faux | egrep -w 'usr/bin/php|/opt/php*/bin/'|awk '{print $1, $3, $4,$14, $15}'));
然后我编写了一个循环来将数组的元素连接成一行(因为数组将每个字段分隔在不同的行上),因此每个数组元素都是来自ps faux的整个PHP脚本行:
while [[ $count -lt $count2 ]]; do memARRAY+=("$(join2 ' ' ${initialARRAY[@]:$ix:$ixx})"); count=$(( $count + 1 )); ix=$(( $ix + 5 )); done
数组memARRAY的内容如下:
root@server [~]# printf "%s\n" "${memARRAY[@]}"
user 0.0 1.0 /usr/bin/php /home/user/public_html/cart.php
user 0.0 0.9 /usr/bin/php /home/user/public_html/cart.php
user3 0.0 0.2 /usr/bin/php /home/user3/public_html/manager.php
user3 0.0 0.4 /usr/bin/php /home/user3/public_html/manager.php
user3 0.0 0.3 /usr/bin/php /home/user3/public_html/manager.php
user3 0.0 0.2 /usr/bin/php /home/user3/public_html/search.php
user3 0.0 0.1 /usr/bin/php /home/user3/public_html/search.php`
没有间距,因为我不知道如何复制和粘贴到堆栈中而没有奇怪的间距问题。
现在我遇到的问题是,当我尝试计算每个用户的进程数,同时还计算和总结每个脚本的CPU / MEM使用情况时,最终输出只显示一个脚本,而不是2个脚本正在为user3运行。
这是我认为不能正常工作的部分:
for i in $(printf '%s\n' "${memARRAY[@]}" | awk '{print $1}' | sort | uniq ); do echo -e "Resource Usage by Script:\n $(printf '%s\n' "${memARRAY[@]}" | grep ${i} | awk '{ x+=$2; y+=$3; z=$4; w=$5; count++$5 }END{print " Procs:",count,"",z,w,"","CPU: ",x,"%"," ","MEM:", y,"%"}')\n";done"`
上述行的输出是这样的:
[[ User Information for: user3 ]]
Resource Usage by Script:
Procs: 2 [ /usr/bin/php /home/user3/public_html/search.php ] CPU: 0 % MEM: 0.4 %
[[ User Information for: user ]]
Resource Usage by Script:
Procs: 10 [ /usr/bin/php /home/user/public_html/cart.php ] CPU: 0 % MEM: 9.9 %`
正如您所看到的,它只计算并计算了为user3用户运行的两个脚本中的一个。我对如何计算并输出每个用户的所有脚本感到茫然。
非常感谢任何帮助!