執行計劃任務時會主動給root發一封信php
執行計劃任務時會主動給root發一封信,關閉再也不發信的方法:css
原來是這樣:html
[root@scj ~]#crontab -ljava
*/30 * * * * /usr/sbin/ntpdate ntp.ksyun.cnnode
改成這樣:python
[root@scj ~]#crontab -lmysql
*/30 * * * * /usr/sbin/ntpdate ntp.ksyun.cn > /dev/null 2>&1linux
注意:2>&1 等價於 &> ,意思是:將 標準正確輸出 和 標準錯誤輸出 都輸出到一個地方nginx
解決does not map back to the address - POSSIBLE BREAK-IN ATTEMPTgit
##ssh登錄時報錯: #less /var/log/secure #Address 192.168.1.168 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT! ##分析: #是由於DNS服務器把 192.168.1.168 的地址反向解析成 localhost C:\Users\shencj>nslookup 默認服務器: localhost Address: 192.168.3.1 > set type=PTR > 192.168.1.168 服務器: localhost Address: 192.168.3.1 168.1.168.192.in-addr.arpa name = localhost ##解決方法: vim /etc/ssh/sshd_config 將UseDNS 改成 no /etc/init.d/sshd restart
zabbix微信,短信報警
參考:
http://my.oschina.net/u/2422096/blog/601976?fromerr=8TlHnGSF
http://wangzan18.blog.51cto.com/8021085/1734408
[Errno 13] Permission denied: '/root/.python-eggs'解決辦法
python腳本里面添加,注意必須在MySQLdb模塊前面添加: import os os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs' [root@localhost shell]# more qps.py #!/usr/bin/env python # coding=utf-8 import time import sys import os os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs' import MySQLdb 另外權限 給 chmod 755 /tmp/.python-eggs/
獲取一分鐘的日誌(nginx)
#!/bin/bash #author: linuxhub.org #取出nginx一分鐘內的日誌 #Nginx日誌格式: # 192.168.0.161 - - [26/Mar/2015:14:29:20 +0800] "GET / HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36" - if [ -z $1 ];then echo "請在腳本後面加上日誌文件!!" exit 1 fi #日誌文件 #logfile=/data/logs/nginx/admin.kuaiyouxi.com.log logfile=$1 #開始時間 start_time=`date -d "10 minutes ago" +"%H:%M:%S"` #start_time="14:29:20" #結束時間 stop_time=`date +"%H:%M:%S"` #stop_time="14:35:36" tac $logfile | awk -v st="$start_time" -v et="$stop_time" ' #BEGIN{ # print "\n-------------------------------"; # print "開始時間:"st; # print "結束時間:"et; # print "在這個時間段(1分鐘內)的日誌以下:" # print "---------------------------------\n" #} { #第4列的時間數據,而後按:冒號進行分割出時間 #split($4,i,":"); #組合時間 例: 14:37:49 #t=sprintf("%s:%s:%s",i[2],i[3],i[4]); #第4列的時間數據,取出時:分:秒 t=substr($5,RSTART+14,21); #判斷在st與et之間的時間 if(t>=st && t<=et) {print $0} } #END{ # print "\n" #}'
##獲取一分鐘內的日誌## sed -n "/$(date -d "1 minutes ago" "+%d\/%b\/%Y:%H:%M")/,/$(date "+%d\/%b\/%Y:%H:%M")/p" access.log
nginx root與alias區別
##Nginx 貌似沒有虛擬目錄的說法,由於它原本就是完徹底全根據目錄來設計並工做的。 ##若是非要給nginx安上一個虛擬目錄的說法,那就只有alias標籤比較"像",乾脆來講說alias標籤和root標籤的區別吧。 ##最基本的區別:alias指定的目錄是準確的,root是指定目錄的上級目錄,而且該上級目錄要含有location指定名稱的同名目錄。 ##另外,根據前文所述,使用alias標籤的目錄塊中不能使用rewrite的break。 ##說不明白,看下配置: location /abc/ { alias /home/html/abc/; } ##在這段配置下,http://ip/abc/a.html就指定的是/home/html/abc/a.html。這段配置亦可改爲 location /abc/ { root /home/html/; } ##這樣,nginx就會去找/home/html/目錄下的abc目錄了,獲得的結果是相同的。可是,若是我把alias的配置改爲: location /abc/ { alias /home/html/def/; } ##那麼nginx將會從/home/html/def/取數據,這段配置還不能直接使用root配置,若是非要配置,只有在/home/html/下創建一個 def->abc的軟link(快捷方式)了。 ##通常狀況下,在location /中配置root,在location /other中配置alias是一個好習慣
location /img/ { alias /var/www/p_w_picpath/; } #按照上述配置,訪問/img/目錄裏面的文件時,ningx會自動去/var/www/p_w_picpath/目錄找文件 location /img/ { root /var/www/p_w_picpath; } #按照這種配置,訪問/img/目錄下的文件時,nginx會去/var/www/p_w_picpath/img/目錄下找文件 alias是一個目錄別名的定義,root則是上層目錄的定義 還有一個重要的區別是alias後面必需要用「/」結束,不然會找不到文件的,而root則無關緊要
history顯示時間
vi /etc/bashrc ##在最後添加: username=`whoami` export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S $username " export HISTFILESIZE=1000000 export HISTSIZE=2000 source /etc/bashrc
#history 321 2015-10-12 10:45:49 root vi /etc/bashrc 322 2015-10-12 10:45:57 root source /etc/bashrc 323 2015-10-12 10:46:02 root ifconfig 324 2015-10-12 10:46:04 root history 325 2015-10-12 10:46:23 root vi /etc/bashrc 326 2015-10-12 10:46:32 root source /etc/bashrc 327 2015-10-12 10:46:33 root history 328 2015-10-12 10:46:42 root date 329 2015-10-12 10:46:44 root history ##數目,時間,用戶,命令
nmap掃描端口
nmap -sS -O 139.196.xxx.xxx
安裝epel yum源
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
netstat查看鏈接狀況
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}' ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'
tomcat部署多個項目
vi server.xml ##在host標籤裏面添加一個Context標籤 <Context path="/pic" reloadable="true" docBase="/photo/pic"/> ##path:別名 ##docBase:根目錄
訪問:ip:8080 默認訪問的根目錄是webapps 訪問:ip:8080/pic 訪問的是/photo/pic
參考:http://blog.csdn.net/philosophyatmath/article/details/30246631
tomcat7日誌切割
一、下載 # wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 二、解壓縮 # tar zxvf cronolog-1.6.2.tar.gz 三、進入cronolog安裝文件所在目錄 # cd cronolog-1.6.2 四、運行安裝 # ./configure # make # make install 五、查看cronolog安裝後所在目錄(驗證安裝是否成功) # which cronolog ##通常狀況下顯示爲:/usr/local/sbin/cronolog
vi /usr/local/tomcat7/bin/catalina.sh ##在大約370行 ##找到 if [ "$1" = "-security" ] ; then ##修改成: if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" fi shift eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Djava.security.manager \ -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \ | /usr/local/sbin/cronolog /data/tomcat7/logs/catalina.%Y-%m-%d.out >> /dev/null & else eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \ | /usr/local/sbin/cronolog /data/tomcat7/logs/catalina.%Y-%m-%d.out >> /dev/null & fi
##重啓tomcat
nginx服務器http重定向到https的正確寫法
server { listen 80; server_name my.domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name my.domain.com; [....] }
參考:http://www.sijitao.net/1829.html
nginx的全局變量參數解釋
參考:http://blog.sina.com.cn/s/blog_594c47d00101dfyh.html
nginx的全局變量參數解釋 --網站Nginx Rewrite 規則 nginx的全局變量參數解釋: $arg_PARAMETER#這個變量包含GET請求中,若是有變量PARAMETER時的值。 $args #這個變量等於請求行中(GET請求)的參數,例如foo=123&bar=blahblah; $binary_remote_addr#二進制的客戶地址。 $body_bytes_sent#響應時送出的body字節數數量。即便鏈接中斷,這個數據也是精確的。 $content_length#請求頭中的Content-length字段。 $content_type#請求頭中的Content-Type字段。 $cookie_COOKIE#cookie COOKIE變量的值 $document_root#當前請求在root指令中指定的值。 $document_uri#與$uri相同。 $host#請求主機頭字段(即:請求url中的host),不然爲服務器名稱(即:配置文件中的server_name值)。 $hostname#Set to the machine’s hostname as returned by gethostname $http_HEADER $is_args#若是有$args參數,這個變量等於」?」,不然等於」",空值。 $http_user_agent#客戶端agent信息 $http_cookie#客戶端cookie信息 $limit_rate#這個變量能夠限制鏈接速率。 $query_string#與$args相同。 $request_body_file#客戶端請求主體信息的臨時文件名。 $request_method#客戶端請求的動做,一般爲GET或POST。 $remote_addr#客戶端的IP地址。 $remote_port#客戶端的端口。 $remote_user#已經通過Auth Basic Module驗證的用戶名。 $request_completion#若是請求結束,設置爲OK. 當請求未結束或若是該請求不是請求鏈串的最後一個時,爲空(Empty)。 $request_method#GET或POST $request_filename#當前請求的文件路徑,由root或alias指令與URI請求生成。 $request_uri#包含請求參數的原始URI,不包含主機名,如:」/foo/bar.php?arg=baz」。不能修改。 $scheme#HTTP方法(如http,https)。 $server_protocol#請求使用的協議,一般是HTTP/1.0或HTTP/1.1。 $server_addr#服務器地址,在完成一次系統調用後能夠肯定這個值。 $server_name#服務器名稱(即:配置文件中的server_name值)。 $server_port#請求到達服務器的端口號。 $uri#不帶請求參數的當前URI,$uri不包含主機名,如」/foo/bar.html」。該值有可能和$request_uri 不一致。$request_uri是瀏覽器發過來的值。該值是rewrite後的值。例如作了internal redirects後。
if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }
rewrite後面的flag:
參考:http://www.76ku.cn/articles/archives/317
##nginx中if判斷&& set $flag 0; if ($uri !~ /login$) { set $flag "${flag}1"; } if ($uri !~ /register.html$) { set $flag "${flag}1"; } if ($uri !~ /account/.*$) { set $flag "${flag}1"; } if ($flag = "0111") { #rewrite ^/?.*$ http://$server_name$request_uri; rewrite ^(.*) http://$server_name$1 permanent; } ##nginx中if判斷&&
rewrite重定向和僞靜態
rewrite重定向和僞靜態: 重定向:rewrite ^(.*) https://$server_name$1 permanent; (https://$server_name$1 是一個完整的url ),將http請求重定向到https 僞靜態:rewrite ^(.*)/t(\d+)\.html$ $1/index.php?t=3 last; ($1/index.php?t=3 是一個相對的url,沒有host)將http://dede.com/index.php?t=3用僞靜態規則改寫成http://dede.com/t3.html
keepalived相關
notify_master/etc/keepalived/master.sh #當前服務器爲主時,觖發執行的腳本 notify_backup/etc/keepalived/slave.sh #當前服務器爲備時,觖發執行的腳本 notify_fault/etc/keepalived/notify_fault.sh #當前服務器出現問題時,觖發執行的腳本 notify_stop/etc/keepalived/down.sh #當前服務器爲down時,觖發執行的腳本 notify_down /etc/keepalived/killkeepalived.sh #檢測的服務(如:mysql)down掉時,觸發執行的腳本 vi /etc/keepalived/master.sh #增長以下內容 #!/bin/bash echo "#`date +"%Y-%m-%d%H:%M"` change master status!!! " >> /etc/keepalived/change.log #輸出當前時間到日誌中 ##編寫當前服務器爲備時的腳本## vim/etc/keepalived/slave.sh #!/bin/bash echo "#`date +"%Y-%m-%d%H:%M"` change slave status!!!" >> /etc/keepalived/change.log #輸出當前時間到日誌中 ##編寫當前服務器不正常時的腳本## vim/etc/keepalived/notify_fault.sh #!/bin/bash echo "#`date +"%Y-%m-%d%H:%M"` change notify_fault status!!!" >>/etc/keepalived/change.log #輸出當前時間到日誌中 sleep 3 #休眠3秒 echo "#`date +"%Y-%m-%d%H:%M"` try startup mysql!!!" >> /etc/keepalived/change.log #輸出當前時間到日誌中 service mysql start #啓動Mysql服務器 ##編寫當前服務器wodn時的腳本## vim/etc/keepalived/down.sh #!/bin/bash echo "#`date +"%Y-%m-%d%H:%M"` keepalived is down!!!" >> /etc/keepalived/change.log #輸出當前時間到日誌中
##單播模式## vrrp_instance VI_1 { state backup interface eth0 virtual_router_id 51 priority 99 unicast_src_ip 10.10.191.224 #本機ip unicast_peer { 10.10.150.230 #對端ip } advert_int 1 #nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.10.113.94 } }
大神的博客地址
http://space.itpub.net/26355921
新浪微博技術總監: http://blog.csdn.net/heiyeshuwu
startssl證書免費申請步驟:http://blog.csdn.net/ruixue0117/article/details/22201303 #建議使用firefox瀏覽器
mysql配置主從
binlog_format = MIXED //binlog日誌格式,mysql默認採用statement,建議使用mixed log-bin = /data/mysql/mysql-bin.log //binlog日誌文件 expire_logs_days = 7 //binlog過時清理時間 max_binlog_size = 100m //binlog每一個日誌文件大小 binlog_cache_size = 4m //binlog緩存大小 max_binlog_cache_size = 512m //最大binlog緩存大小
驗證mysql主從數據是否一致(pt-table-checksum和pt-table-sync)
##安裝toolkit須要一些依賴包 yum -y install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes
參考:http://www.cnblogs.com/zhoujinyi/archive/2013/05/09/3067045.html
zabbix觸發器表達式經常使用的兩個函數
last:
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5
意思是:最後時刻cpu的負載大於5,則觸發報警
min:
{www.solutionware.com:net.if.in[eth0,bytes].min(60)}>100K
意思是:60秒內流進網卡的流量持續大於100K,則報警
Name | 觸發器名稱. 名稱能夠包含宏變量: {HOST.HOST}, {HOST.NAME}, {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {ITEM.VALUE}, {ITEM.LASTVALUE} and {$MACRO} .$1, $2…$9 能夠被用來關聯表達式的常量 示例: name:Processor load above $1 on {HOST.NAME}」 表達式:system.cpu.load[percpu,avg1].last(0)}>5 會顯示爲:Processor load above 5 on ttlsa雲服務器 |
Expression | 計算觸發器狀態的邏輯表達式,這邊設置爲上一次值等於0 |
Multiple PROBLEM events generation | 經過設置該選項,你能夠在觸發器產生problem的時候觸發一個事件 |
Description | 觸發器的描述,通常name寫的不清楚,這邊能夠具體描述這個觸發器的做用,例如nginx當前離線,請處理等等。Zabbix 2.2版本開始,支持觸發器名稱。 |
URL | 在Monitoring → Triggers中,能夠看到URL而且能夠點擊,通常狀況下他須要配合觸發器ID來使用,在url中包含觸發器ID(宏變量 {TRIGGER.ID}),這樣能夠直接點擊到具體觸發器中。 |
Severity | 設置嚴重性級別,上圖我設置爲「災難」,你能夠相應的設置警告、嚴重等狀態的觸發器 |
Enabled | 當前觸發器是否啓用 |
zabbix自定義key注意事項
UserParameter=sjsyServer.status,/etc/zabbix/itemscripts/mysqlstatus.sh
注意:zabbix用戶要對/etc/zabbix/itemscripts/mysqlstatus.sh這個文件有執行權限
[root@localhost itemscripts]# ll /etc/zabbix/itemscripts/mysqlstatus.sh -rwxr--r-- 1 zabbix root 114 Sep 14 12:25 /etc/zabbix/itemscripts/mysqlstatus.sh
不然:
[root@localhost ~]# zabbix_get -s 192.168.188.129 -k sjsyServer.status ##獲取的結果將會是空
saltstack相關
saltstack中文wiki社區:http://www.saltstack.cn/projects/cssug-kb/wiki
saltstack中文介紹:http://docs.saltstack.cn/zh_CN/latest/
saltstack官網:http://saltstack.com/
saltstack配置實例:http://bbs.chinaunix.net/thread-4142057-1-1.html
salt寫的至關不錯:http://my.oschina.net/u/877567/blog?catalog=404877
http://my.oschina.net/xxbAndy/blog/391591
http://my.oschina.net/guol/blog/156610
salt全部資源: http://docs.saltstack.cn/zh_CN/latest/ref/states/all/index.html
磁盤inode不足
最近磁盤老是寫不上數據,查看磁盤空間(df -h)發現空間只用了不到5%,後來找到牛人才知道是磁盤inode已經用完了,可以使用df -hi查看磁盤inode使用狀況。
緣由:使用/ext3的磁盤inode空間只有幾百K,若是存儲太多的小文件致使空間不足時就沒法再建立新的文件。
解決方案:使用xfs的磁盤格式,可增長inode大小。
執行步驟:
1. 安裝xfsprogs-2.9.4-1.el5.centos.x86_64.rpm
rpm -ivh http://mirror.centos.org/centos/5/extras/x86_64/RPMS/xfsprogs-2.9.4-1.el5.centos.x86_64.rpm
或者將包下載下來手動安裝
2. 將掛載磁盤空間數據備份,並將該磁盤卸載:
umount /data
若是失敗,執行如下命令查看使用/data文件的全部進程:
lsof |grep /data
執行如下命令將進程殺死:
lsof |grep /data |awk -F" " '{print $2}' |xargs kill
3. 執行如下命令將磁盤格式化爲xfs
mkfs.xfs -f /dev/xvdb
4. 修改/etc/fstab,將掛載磁盤的格式由ext3改成xfs
5. 從新掛載磁盤:mount -a
iptables
每次執行 iptables -A 添加規則後,必定要記得執行:
[root@scj ~]# /etc/init.d/iptables save
lrzsz
rz:將windous端數據傳到linux服務器上
rz -y:將windous端數據傳到linux服務器上,並覆蓋掉原來相同文件名的文件
sz httpd.conf:將linux服務器上的httpd.conf文件傳到windous端
svn同步數據到線上服務器
只同步指定版本到最新版本被改過的數據:
在線上服務器寫一個腳本,代碼以下:
#!/bin/bash #此腳本是根據svn版本號,指定版本到最新版本只同步更改過的文件到服務端 Svnurl=http://ip/svn/zhushen/server Web_server_dir=/tmp/scj/server Log_dir=/tmp/scj #列出指定版本到最新版本被更改過的文件 Update_server_xml=$(/usr/bin/svn diff -r $1:HEAD $Svnurl 2> /dev/null | grep Index |awk -F":" '{print $2}') #同步被改過的文件 case $1 in [0-9]*) echo ===================== >> $Log_dir/update.log 2>&1 echo $(date +%F-%H:%M:%S) >> $Log_dir/update.log 2>&1 for conf_xml in $Update_server_xml do /usr/bin/svn export $Svnurl/$conf_xml $Web_server_dir/$conf_xml --force echo $conf_xml >> $Log_dir/update.log done ;; *) echo "輸入版本號" ;; esac
經常使用數據下載
netstat 出現大量的close_wait狀態
出現這種問題的主要緣由:
客戶端主動關閉鏈接,服務端因爲某種緣由沒有即便向客戶端發送FIN數據請求,致使服務端沒有即便將鏈接釋放掉
解決方法:
經過修改系統的內核參數(tcp_keepalive相關的)來解決問題:
net.ipv4.tcp_keepalive_time=30
net.ipv4.tcp_keepalive_probes=2
net.ipv4.tcp_keepalive_intvl=2
sysctl -p #使當即生效
注意:內核參數我調整的可能有些猛,到底合不合適要注意觀察
參考連接:
http://ipsysctl-tutorial.frozentux.net/
http://haka.sharera.com/blog/BlogTopic/32309.htm
注意:其實出現這種問題根本的緣由仍是程序代碼有問題
find查找某一個文件
find . -name 'file*' #查找當前目錄下file開頭的文件
注意:-name後面的關鍵字要用引號引發來,如'file*'
##find查找目錄## 只查找/backup/目錄下的全部一級目錄 find /backup/ -maxdepth 1 -type d -mtime +15 -exec rm -rf {} \; ##-maxdepth 1 -type d,只顯示一級目錄
使用find在目錄下查找文件裏含有"INFORMATION"字符串的文件名
[root@scj postfix]# find /etc/postfix/ | xargs grep "INFORMATION" | awk -F":" '{print $1}' | sort |uniq
/etc/postfix/main.cf
或
[root@scj postfix]# find /etc/postfix/ | xargs grep "INFORMATION" | awk -F":" '{print $1}' | awk -F"/" '{print $NF}'|sort |uniq
main.cf
磁盤報警快速查找方法
一、df -h
查看掛載狀況和每一個分區的使用狀況
二、du -h --max-depth=1
查看當前目錄下,每一個目錄裏數據的大小(只能查看目錄,文件會忽略掉),深度是1(也就是隻查看當前的一級目錄)
[root@scj tmp]# du -h --max-depth=1 12K ./scripts 96K ./salt 2.1G ./lishi 4.0K ./.ICE-unix 8.0K ./pear 2.1G ./beifen 4.2G .
能夠看出/tmp目錄下,總共有4.2G的數據,beifen目錄和linshi目錄各有2.1G
三、du -sh
查看當前目錄下全部數據的大小
[root@scj tmp]# du -sh 4.2G .
四、du -sh *
忽然知道這個命令更好用,不只統計全部目錄,還統計全部文件(當前目錄下的一級文件和子目錄)
[root@scj tmp]# du -sh * 4.0K aa 4.0K beifen 4.0K file1 2.1G lishi 0 mysqld.sock 620K mysqldump.sql 8.0K pear 4.0K percona-version-check 16K php-fpm.log 96K salt 12K scripts 0 www.log.slow 0 yum.log 4.0K yum_save_tx-2015-04-21-06-053qooJ4.yumtx 4.0K yum_save_tx-2015-04-21-07-03wAW6m7.yumtx 8.0K yum_save_tx-2015-04-29-11-12VLBEZO.yumtx 8.0K yum_save_tx-2015-04-29-11-17jxd71y.yumtx 8.0K yum_save_tx-2015-04-29-11-188of3QH.yumtx
利用上面四個命令能夠快速定位某個目錄(其實第二個命令能夠被第四個命令替代了)
建立邏輯卷
新買進一臺服務器,用來存數據庫數據
最好的方法是將磁盤作成邏輯卷(未來可動態擴展)
步驟:http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3096087.html
縮減home邏輯卷,添加到/(根)邏輯卷下:
http://www.php114.net/2013/1019/637.html
http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3097785.html
rpm包下載地址
163網易:
http://mirrors.163.com/centos/
東北大學:
http://mirror.neu.edu.cn/centos/
搜狐CentOS鏡像:
http://mirrors.sohu.com/centos/
電子科技大:
http://mirrors.stuhome.net/centos/
中科大:
http://centos.ustc.edu.cn/centos/
兩次fork()緣由
一、子進程的產生:
執行任何程序,父進程會產生子進程,由子進程去完成;子進程會被分配必定的資源,同時子進程會繼承父進程的全部資源環境
二、執行fork()函數:
執行fork()函數會產生一個子進程,fork()函數會返回兩個值,子進程號和0,如果父進程則返回子進程號,如果子進程則返回0;若調用fork()函數失敗則返回-1(失敗緣由:進程數達到上限;內存不足)
三、孤兒進程:
父進程產生一個子進程,若父進程在子進程結束以前結束,則這個子進程就會變爲孤兒進程,不過,這個子進程以後會由init這個進程去管理,同時子進程結束時,資源也會被init進程回收
四、殭屍進程:
父進程產生一個子進程,子進程結束時,父進程沒有用wait或waitpid回收子進程,這時候這個子進程就會變成殭屍進程,殭屍進程不會佔用系統資源,不過會佔用進程表,雖然殭屍進程不佔用資源,可是若是殭屍進程多了也會影響系統性能
五、兩次fork():
爲了不出現殭屍進程,就須要執行兩次fork();父進程執行fork產生子進程,子進程再執行fork產生一個子子進程;子子進程的父進程是子進程,子進程的父進程多是一個一直在運行的某個服務, 咱們把子進程停掉,這時候子子進程就會由init進程去管理,以後子子進程結束時,資源也由init進程去回收
六、參考:http://www.linuxidc.com/Linux/2011-08/40590.htm
守護進程
一、定義:
守護進程:脫離終端而且在後臺運行的進程
守護進程脫離終端:避免進程在執行過程當中的信息在任何終端上顯示;進程不會被任何終端所產生的終端信息所打斷
二、建立步驟:
建立子進程,退出父進程:
使用fork()函數和if判斷語句,使子進程變爲孤兒進程,交給init進程管理
pid = os.fork() #調用fork()函數 if pid < 0: #小於0,代表調用fork失敗 print 'invoke fork() failure' sys.exit(1) #退出腳本 elif pid > 0: #大於0,代表是父進程 sys.exit(0) #退出父進程
在子進程中建立新會話:
這個步驟是建立守護進程中最重要的一步;調用fork函數建立子進程時,子進程繼承了父進程的所有資源環境(包括會話期、進程組、控制終端等),雖然父進程退出了,但會話期、進程組、控制終端等並無改變,所以,子進程並無真正的獨立出來,而setsid函數可以使子進程徹底獨立出來
os.setsid() #調用setsid()函數
改變當前目錄爲根目錄:
調用fork()函數建立子進程,子進程也會繼承父進程的當前工做目錄,若子進程使用父進程的當前工做目錄可能會有一些問題
os.chdir("/")
重設文件權限掩碼:
把文件權限掩碼設置爲0,能夠大大加強守護進程的靈活性
os.umask(0)
三、一個建立守護進程的實例:
vi /tmp/dir1/file.py #encoding:utf-8 import os import sys import time import commands pid = os.fork() #調用fork()函數 if pid < 0: #小於0,表面調用fork失敗 print 'invoke fork() failure' sys.exit(1) #退出腳本 elif pid > 0: #大於0,表面是父進程 sys.exit(0) #退出父進程,下面全部命令都是在子進程下執行 os.setsid() #在子進程中調用setsid函數 os.chdir("/") os.umask(0) while True: os.system('echo `date +%F-%H%M%S` >> /tmp/dir1/file') time.sleep(1)
[root@scj dir1]# python /tmp/dir1/file.py [root@scj dir1]# ps -ef | grep file.py root 3282 1 0 02:46 ? 00:00:00 python /tmp/dir1/file.py root 3311 1575 0 02:46 pts/1 00:00:00 grep file.py
由上發現:file.py被放在後臺做爲守護進程運行,父進程號是1(也就是init進程)
注意:守護進程由init進程管理
[root@scj dir1]# tail -f /tmp/dir1/file 2015-06-23-025041 2015-06-23-025042 2015-06-23-025043 2015-06-23-025044 2015-06-23-025045 2015-06-23-025046 2015-06-23-025047 2015-06-23-025048 2015-06-23-025049 2015-06-23-025050 2015-06-23-025051 2015-06-23-025052 2015-06-23-025053 2015-06-23-025054
每秒執行一次
四、中止守護進程的方法:
使用kill殺死
[root@scj dir1]# ps -ef | grep file.py root 3282 1 0 02:46 ? 00:00:00 python /tmp/dir1/file.py root 4195 1575 0 02:51 pts/1 00:00:00 grep file.py [root@scj dir1]# kill -9 3282
添加靜態路由
另外一種永久的方法:
###設置eth0上的路由,若是不默認網關在eth0上,就不用設置了 #cat > /etc/sysconfig/network-scripts/route-eth0 << EOF #10.0.0.0/8 via 10.126.40.254 #EOF
內核優化
net.core.wmem_max = 873200 net.core.rmem_max = 873200 net.core.netdev_max_backlog = 1024 net.core.somaxconn = 512 net.ipv4.tcp_mem = 786432 1048576 1572864 net.ipv4.tcp_wmem = 8192 436600 873200 net.ipv4.tcp_rmem = 8192 436600 873200 net.ipv4.tcp_retries2 = 5 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000
#### sysctl.conf setting 設置內核參數 cat >> /etc/sysctl.conf << EOF ###下面的TCP內核參數的調整都是爲了讓服務器能夠應對大的或突發性的鏈接數(如上萬的ESTALISH鏈接) 這些調整在nginx/squid/varnish/httpd/ftp這樣有會產生大量的TCP鏈接的應用上,是須要的 ##最大的TCP數據接收窗口(字節) net.core.wmem_max = 873200 ##最大的TCP數據發送窗口(字節) net.core.rmem_max = 873200 ##每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的最大數目,默認是300 net.core.netdev_max_backlog = 1024 ##定義了系統中每個端口最大的監聽隊列的長度,這是個全局的參數。 net.core.somaxconn = 512 ##下面的三個要一塊兒看 ##第一個net.ipv4.tcp_mem[0][1][2]表示TCP總體內存使用,計算方式是值*內存頁大小4K; ##三個值分別是低於[0]值,表示TCP沒有內存壓力,在[1]值下,進入內存壓力階段,大於[2]高於此值,TCP拒絕分配鏈接 ##net.ipv4.tcp_wmem[0][1][2]分別表示最小發送內存,默認發送內存,最大發送內存; ##結合上面的net.ipv4.tcp_mem[0][1][2]三個值,當TCP總內存佔用小於tcp_mem[0]時,能夠分配小於tcp_wmem[2]的內存給一個TCP鏈接; ##當TCP內存佔用大於tcp_mem[0]時,能夠分配tcp_wmem[0]的內存; ##當TCP總內存佔用大於tcp_mem[1],小於tcp_mem[2]時,能夠分配tcp_wmem[0]的內存; ##當TCP總內存佔用大於tcp_mem[2]時,tcp內存分析沒法進行 ##net.ipv4.tcp_rmem的三個值的解釋同上。 net.ipv4.tcp_mem = 786432 1048576 1572864 #設置[0][1][2]分別爲3G、4G、6G net.ipv4.tcp_wmem = 8192 436600 873200 #設置TCP發送緩存分別爲:最小8K,默認400k,最大800K net.ipv4.tcp_rmem = 8192 436600 873200 #設置TCP接收緩存分別爲:最小8K,默認400k,最大800K net.ipv4.tcp_retries2 = 5 #TCP失敗重傳次數,默認值15,意味着重傳15次才完全放棄.可減小到5,以儘早釋放內核資源 net.ipv4.tcp_fin_timeout = 30 #表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間 net.ipv4.tcp_keepalive_time = 1200 #表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘 net.ipv4.tcp_syncookies = 1 #開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN*** net.ipv4.tcp_tw_reuse = 1 #表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,減小TIME-WAIT 狀態 net.ipv4.tcp_tw_recycle = 1 #表示開啓TCP鏈接中TIME-WAIT sockets的快速回收 net.ipv4.ip_local_port_range = 1024 65000 #增大本地端口數,對於發啓不少對外的鏈接時有用 net.ipv4.tcp_max_syn_backlog = 8192 # 進入SYN包的最大請求隊列.默認1024.對重負載服務器,增長該值顯然有好處 net.ipv4.tcp_max_tw_buckets = 5000 #表示系統同時保持TIME_WAIT套接字的最大數量,若是超過這個數字,TIME_WAIT套接字將馬上被清除並打印警告信息,默認爲180000 ###這四個是用來設置lvs實體機用的,若是你的機器不使用lvs的DR方式,能夠不加這幾個參數 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 EOF
參考: http://waringid.blog.51cto.com/65148/183496/
nohup
若是咱們想把一個進程放在後臺運行,可使用&;可是隻使用&把進程放在後臺運行會有問題,就是當咱們退出帳號或是註銷用戶時,這個進程就會消失;爲了不退出帳號時進程就會消失,可使用nohup,就是no hang up 不掛起的意思
·
sed添加多行
[root@scj www.scj.com]# cat file2.sh aaaaaa bbbbbb cccccc dddddd
在第二行後面添加以下內容:
#備份6服 血色城堡 dbname='gamedb_xscb logdb_xscb' dumpname='6f_xscb' mysqldump --opt --default-character-set=utf8 --databases $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql cd $backuptodir dumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'/' '{print $2}'` tar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile rm -rf $dumpfile
[root@scj www.scj.com]# sed -i '2a\\n#備份6服 血色城堡\ndbname='"'gamedb_xscb logdb_xscb'"'\ndumpname='"'6f_xscb'"'\n\nmysqldump --opt --default-character-set=utf8 --databases $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql\ncd $backuptodir\ndumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'"'/'"' '"'{print \$2}'"'`\ntar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile\nrm -rf $dumpfile\n' file2.sh [root@scj www.scj.com]# cat file2.sh aaaaaa bbbbbb #備份6服 血色城堡 dbname='gamedb_xscb logdb_xscb' dumpname='6f_xscb' mysqldump --opt --default-character-set=utf8 --databases $dbname > ${backuptodir}${dumpname}_full_`date +%Y%m%d%H%M`.sql cd $backuptodir dumpfile=`find . -type f -name "${dumpname}*" | sort | tail -n1 | awk -F'/' '{print $2}'` tar -zcf ${dumpname}_full_`date +%Y%m%d%H%M`.tar.gz $dumpfile rm -rf $dumpfile cccccc dddddd
解析:
[root@scj www.scj.com]# sed '1a\hello' file2.sh #在第一行後面添加hello一行,sed最外面必須用單引號,必須 aaaaaa hello bbbbbb
[root@scj www.scj.com]# sed '1a\hello\nworld' file2.sh #添加兩行,用\n進行換行 aaaaaa hello world bbbbbb
##在第一行後面添加'hello',要帶着單引號 [root@scj www.scj.com]# sed '1a\'"'hello'"'' file2.sh aaaaaa 'hello' bbbbbb ##這裏在單引號裏用'"'把hello引發來便可
[root@scj www.scj.com]# sed '13a\\n' file1.sh && sed "14a\#備份6服 血色城堡\ndbname='gamedb_xscb logdb_xscb'\ndumpname='6f_xscb'\n" file1.sh #sed裏面若引用變量,此時最外面要用雙引號
[root@scj www.scj.com]# sed '1a\if\n {\n echo hello\n }' file2.sh aaaaaa if { echo hello } bbbbbb ##有幾個空格就在單引號寫幾個空格
ls幾個參數
ls:默認是按文件(目錄)名的首字母進行排序的
##注意:pear是目錄 [root@scj tmp]# ls file1 file2 file3.sh gamedb.sql logdb.sql mysqldump.sql pear test yum.log zookeeper [root@scj tmp]# ls -l total 664 -rw-r--r-- 1 user1 nobody 6 Apr 15 06:57 file1 -rw-r--r-- 1 nobody nobody 6 Apr 15 07:00 file2 -rw-r--r-- 1 root root 246 Aug 21 13:23 file3.sh -rw-r--r-- 1 root root 11461 Aug 12 05:07 gamedb.sql -rw-r--r-- 1 root root 7102 Aug 12 05:07 logdb.sql -rw-r--r-- 1 root root 631787 May 6 11:47 mysqldump.sql drwxr-xr-x 3 root root 4096 Apr 10 14:13 pear -rw-r--r-- 1 root root 7 Aug 21 13:25 test -rw-------. 1 root root 0 Apr 3 15:01 yum.log drwxr-xr-x 2 root root 4096 Apr 8 09:45 zookeeper
ls -r:按文件名首字母反向排序
[root@scj tmp]# ls -r zookeeper yum.log test pear mysqldump.sql logdb.sql gamedb.sql file3.sh file2 file1
ls -t:按文件(目錄)的修改時間排序
##最近修改時間在前面 [root@scj tmp]# ls -t test file3.sh gamedb.sql logdb.sql mysqldump.sql file2 file1 pear zookeeper yum.log [root@scj tmp]# ls -lt total 664 -rw-r--r-- 1 root root 7 Aug 21 13:25 test -rw-r--r-- 1 root root 246 Aug 21 13:23 file3.sh -rw-r--r-- 1 root root 11461 Aug 12 05:07 gamedb.sql -rw-r--r-- 1 root root 7102 Aug 12 05:07 logdb.sql -rw-r--r-- 1 root root 631787 May 6 11:47 mysqldump.sql -rw-r--r-- 1 nobody nobody 6 Apr 15 07:00 file2 -rw-r--r-- 1 user1 nobody 6 Apr 15 06:57 file1 drwxr-xr-x 3 root root 4096 Apr 10 14:13 pear drwxr-xr-x 2 root root 4096 Apr 8 09:45 zookeeper -rw-------. 1 root root 0 Apr 3 15:01 yum.log
ls -rlt:按修改時間反向排序
[root@scj tmp]# ls -ltr total 664 -rw-------. 1 root root 0 Apr 3 15:01 yum.log drwxr-xr-x 2 root root 4096 Apr 8 09:45 zookeeper drwxr-xr-x 3 root root 4096 Apr 10 14:13 pear -rw-r--r-- 1 user1 nobody 6 Apr 15 06:57 file1 -rw-r--r-- 1 nobody nobody 6 Apr 15 07:00 file2 -rw-r--r-- 1 root root 631787 May 6 11:47 mysqldump.sql -rw-r--r-- 1 root root 7102 Aug 12 05:07 logdb.sql -rw-r--r-- 1 root root 11461 Aug 12 05:07 gamedb.sql -rw-r--r-- 1 root root 246 Aug 21 13:23 file3.sh -rw-r--r-- 1 root root 7 Aug 21 13:25 test
刷博客訪問次數
import webbrowser import time import os z = 1 while z <= 5: x = 1 while x <= 10: webbrowser.open_new_tab("http://732233048.blog.51cto.com/9323668/1625477") x = x + 1 time.sleep(1) else: os.system("taskkill /F /IM 360se.exe") z = z + 1
注意:
博文的連接地址:http://732233048.blog.51cto.com/9323668/1625477
360瀏覽器的程序名稱:360se.exe
windows殺掉瀏覽器程序的命令:taskkill /F /IM 360se.exe
本例中共打開50次:
裏面循環打開10次,關閉瀏覽器
外面循環5次
git
git亂碼問題:http://segmentfault.com/a/1190000000578037
git使用:http://blog.csdn.net/vipzjyno1/article/details/
lsof和fuser
lsof:查看某個進程打開使用的文件有哪些
lsof | grep puppet :查看puppet進程所打開的文件
fuser:查看某一個文件是由哪一個進程打開的
fuser -v /usr/lib/ruby/1.8/i386-linux/syck.so:包含用戶,進程號及command等等
fuser -m :後面接的那個文件名會主動上提到該文件系統的最頂層,對umount不成功頗有效
如:fuser -m /home 查看home正在被哪些進程所使用
fuser -m /home/xxxx/xxxx 上跳到文件系統最頂層/home
[root@localhost ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 1634 root 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1662 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1663 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1664 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1665 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1714 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1715 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1716 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 1717 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 2086 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) httpd 2087 daemon 4u IPv6 10007 0t0 TCP *:http (LISTEN) [root@localhost ~]# ps -ef | grep http root 1634 1 0 05:17 ? 00:00:03 /usr/local/apache2/bin/httpd -k start daemon 1662 1634 0 05:17 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 1663 1634 0 05:17 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 1664 1634 0 05:17 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 1665 1634 0 05:17 ? 00:00:02 /usr/local/apache2/bin/httpd -k start daemon 1714 1634 0 05:20 ? 00:00:02 /usr/local/apache2/bin/httpd -k start daemon 1715 1634 0 05:20 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 1716 1634 0 05:20 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 1717 1634 0 05:20 ? 00:00:02 /usr/local/apache2/bin/httpd -k start daemon 2086 1634 0 09:26 ? 00:00:01 /usr/local/apache2/bin/httpd -k start daemon 2087 1634 0 09:26 ? 00:00:02 /usr/local/apache2/bin/httpd -k start root 2899 2771 0 15:54 pts/3 00:00:00 grep http [root@localhost ~]# lsof -i :80 |wc -l 12 [root@localhost ~]# ps -ef | grep http|wc -l 12
centos查看網卡流量iftop
top:用來查看系統的性能狀況
l: 切換顯示平均負載和啓動時間信息。即顯示隱藏第一行 m:切換顯示內存信息。即顯示隱藏內存行 t: 切換顯示進程和CPU狀態信息。即顯示隱藏CPU行 c:切換顯示命令名稱和完整命令行。 顯示完整的命令。 這個功能頗有用。 M: 根據駐留內存大小進行排序。 P:根據CPU使用百分比大小進行排序。 T:根據時間/累計時間進行排序 top -bc -n1 與 ps -ef 功能差很少,且更詳細;在方括號'[]'裏的都是內核級進程
iftop:用來查看網卡流量狀況
參考: