这个话题大都是这么说的。 我负责运行Apache2的一些运行Ubuntu 12.04的Web服务器,我想设置APC。 现在我明白,当处理有错误或怪癖的PHP代码时,APC可能会遇到分段错误问题。 因此,清理是明智的,但从人力angular度来看,并不是真正实用的。 所以我已经编写了一个脚本来监视主Apache2 error.log并计算它看到的分段错误数。 我运行它作为每2分钟运行的cron作业。 如果遇到指定数量的分段故障,应自动重启Apache2,清除APC并重新运行。 这个脚本的种子想法来自这个页面的评论,但我真的很重视这个概念,使其更多的生产准备满足我的需求和口味。 我对这个脚本通常感到满意,但是感觉一个主要的改进是这个片段的核心逻辑: if [[ `tail -n ${TAIL_NUMLINES} "${APACHE_ERROR_LOG}" | egrep -c "${TEXT_TO_WATCH}"` -ge ${FAIL_COUNT} ]]; then 这基本上是核心逻辑,将日志文件拖尾到指定的行数,如果它看到指定数量的带有exit signal Segmentation fault的日志条目,则决定是时候做一些事情了。 在这种情况下,请logging事件,向某人发送有关事件的消息并重新启动Apache。 我希望这个逻辑能够及时考虑因素,因为错误可能很less。 所以有些情况下我的FAIL_COUNT简单地匹配,不pipe重新启动,因为主错误日志中没有新的条目,因为没有新的错误命中。 这将最终在服务器基本上重新启动每一个cron作业命中的情况下。 这太可怕了 因此,我现在的解决scheme是将FAIL_COUNT & TAIL_NUMLINES设置为足够低的数量,以匹配Apache2重新加载时创build的条目的标准计数。 但是我还是不喜欢那个。 所以,如果有的话,可以添加一个时间框架到我的tail / egrep逻辑。 此外,我想避免创build一个时间戳或日志行的位置提示被保存到一个文件,如果可能的话。 我希望这个脚本是独立的,而不是依靠cron作业。 完整的脚本,因为我现在拥有它。 #!/bin/bash LOCK_NAME="APACHE_LOGWATCHER" LOCK_DIR=/tmp/${LOCK_NAME}.lock PID_FILE=${LOCK_DIR}/${LOCK_NAME}.pid DATE=`date +%Y%m%d` TIME=`date +%H%M` # SUFFIX="-"${DATE}"-"${TIME}; SUFFIX="-"${DATE}; […]
我试图找出我的CentOS服务器上所有PHP进程使用的内存总量。 经过一番awking之后,这是我最后的命令。 ps -e | grep php | awk '{print $1}' | xargs pmap | grep total | awk '{print $2}' | sed 's/K//' | awk '{SUM += $1} END {print SUM/1024}' 现在,理论上这应该是有效的,因为我以K的总ram输出,总结它然后分开,那就是我的MB。 问题是,这是返回 12493.5 那是12GB! 他们没有办法使用12GB的服务器只有4GB。 编辑:根据pmap的手册页, -x开关显示扩展的信息。 http://linux.die.net/man/1/pmap 在这个视图中有一列叫做Dirty。 这是正确的列吗? 当我在肮脏的列上炫耀时,我得到: 1294.1 这对我来说会更有意义。 但我不知道肮脏的列是否是正确的。
我有一套冗长的日志文件,在解决问题的过程中,我会反复回顾。 我通常有大约1-10GB的50-150个文件,我会花上几个小时,然后再不看。 即使使用SSD和大量的RAM也需要几十秒的时间才能获得结果。 它也只locking一个核心,所以如果它可以并行search,那也是好的。 我想知道如果我能通过某种方式索引做得更好。 以后再花几分钟时间可以有更好的performance。 最好是我可以在目录中的terminal运行的东西,并有像grep接口。 然后在最后我可以完全删除该文件夹,这也将删除索引。 这听起来是可能的,而且确实存在吗? 我下一个最好的select是什么?
到目前为止,我有这样的: grep -B 36 'pattern1' Mapper.1.Configuration.MapRules | grep "pattern2" | cut -d'"' -f2 这给我一个我需要的新的分隔值列表。 我可以把它放到一个文件中,然后用逗号查找和replace所有的新行。 但我猜(不,我希望!)有一种方法可以在命令行上做到这一点?
通常要search和replaceselect的文件中的string,我会发现: grep -rl 'pattern' . 这工作正常,除非你有很多比赛。 无论如何,我环顾四周,发现了一个使用find的build议: find /root/path -type f -exec grep -l 'FIND' {} + 这工作正常,但是当我尝试将它传递到Perl来做replace,我仍然得到错误: perl -p -i -e 's|FIND|REPLACE|g' `find /root/path -type f -exec grep -l 'FIND' {} +` -bash: /usr/local/bin/perl: Argument list too long 有没有办法解决?
iftop -t -L1 -s1 输出: iftop -t -L1 -s1 | grep "Total send and receive rate:" 输出: 我怎么能grep只是“总发送和接收状态:”行?
我的日志文件有以下格式: Dec 26 13:11:48 192.168.1.1 kernel: ACCEPT IN=br0 OUT=vlan1 SRC=192.168.1.2 DST=74.125.43.147 LEN=44 TOS=0x00 PREC=0x00 TTL=63 ID=9312 DF PROTO=TCP SPT=11733 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B4) 现在我试图删除一些可有可无的信息,使输出更好的可读性和妥善安排,并将其放入一个新的文件。 结果应该看起来像这样,只应该有以下信息: Dec 26 13:11:48 192.168.1.2 74.125.43.147 TCP SPT=11733 DPT=80 怎么做?
我正在使用CentOS 5.6系统。 由于我的grep版本中存在一个错误 。 我想升级到新版本。 我试图用yum来更新(升级)它,但失败了。 [root@localhost ~]# cat /etc/redhat- redhat-lsb/ redhat-release [root@localhost ~]# cat /etc/redhat-release CentOS release 5.6 (Final) [root@localhost ~]# grep –version grep (GNU grep) 2.5.1 Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY […]
嗨我想看看我正在运行的服务器是否已经停止(如果有,它会返回一个502错误的网关消息。 所以我试图做到这一点: curl http://MY_URL | grep "502" curl部分返回我所期望的。 但是当我把它变成grep时,grep似乎正在增加一些标题: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 113 682 113 682 0 0 230k 0 –:–:– –:–:– –:–:– 666k 这些不在curl的输出中。 而在普通文本文件上的grep不会添加它们。 那么为什么他们被添加到curl通过grepcurl?
我需要得到所有正在运行的PHP脚本的列表,但是通过greppipe道系统只是给了我所有对PHP文件引用的清单 我如何做到这一点? 这甚至有可能吗? root@myhost:/var/www/cron/jobs# ps -ef | grep *.php | grep -v grep 谢谢!