1、以指定使用者的身份運作指令
runuser - work -c "cd /home/work/uc/bin && sh start.sh"
runuser - push -c "cd /home/push/mucs/bin && sh start.sh"
或者:
daemon --user mongod "mongod --config conf/mongod.conf"
daemon 是一個函數名,在使用前需要 source /etc/rc.d/init.d/functions
2、關于rsync資料同步的相關應用:
同步公司UC資料
rsync -avzptogl --progress uc --exclude "uc/logs" zayhu05-mb:/home/work/
同步mucs資料
rsync -avzpogtl --progress mucs --exclude "mucs/logs" --exclude "mucs/saved" --exclude "mucs/ttscache" mucs06-fk:/home/push
更換磁盤時 本地同步
rsync -avztopgl --progress /data/ /data03/
說明:如果沒有-l參數,将不會同步soft link ;--exclude 可以排除一些不希望同步的子目錄
3、防禦方法新的挑戰應答極限攻擊:
采用sysctl将挑戰應答極限值提高到較大範圍,使得攻擊者不能合理地達到它,是以不能推斷出客戶伺服器連接配接的任何附加資料,以此達到防禦目的。
1)設定 /etc/sysctl.conf 中的net.ipv4.tcp_challenge_ack_limit 到一個較大的值(如999999999):
net.ipv4.tcp_challenge_ack_limit = 999999999
2)加載設定:
sysctl -p
4、在umount 一塊磁盤時,系統總是提示busy,排錯如下:
[root@mucs03-mb ~]# lsof +D /data2/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 6646 push cwd DIR 202,80 4096 3145731 /data2/mucs/logs
[root@mucs03-mb ~]# ps -ef | grep 6646
root 5866 1567 0 14:56 pts/1 00:00:00 grep --color=auto 6646
push 6646 6645 0 Nov23 pts/0 00:00:00 -bash
[root@mucs03-mb ~]# kill 6646
[root@mucs03-mb ~]# 然後再umount , 解除安裝成功
補充:如果/data2中包含swap分區的擴充檔案,然後在沒有swapoff的情況下,直接将檔案move到其它磁盤,然後再檢視/data2時系統會提示busy
5、統計公司應用 錯誤日志的分布比例:
[push@mucs01-fk logs]$ grep -i error mucs.err.log.2016-12-09 | awk -F'[\\[\\]]' '{state[$4]+=1;line+=1}END{for(i in state)printf ("%-35s%10d\t%-8f%\n",i,state[i],state[i]*100/line)}'
注意:awk 在定義分隔符時可以定義多個,例如:df -h | awk -F"[ %]" '/data/{if($(NF-2)>50)print $0}' 就是以空格或百分号為分隔符;但如果分隔符需要定義成中括号時,就必須使用轉義符。awk 轉義中括号時需要使用 '\\' 。
6、從/var/log/nginx/error.log檔案中過濾近十分鐘的error日志:
[root@nginx01-mb ~]# tail -c 10m /var/log/nginx/error.log | grep -a "error" | awk -F '[' 'BEGIN{"date +%s" | getline nowTS}{"date -d \""$1"\" +%s" | getline ts; if((nowTS - ts) < 600) print $0 }'
<a href="http://s2.51cto.com/wyfs02/M00/8B/62/wKiom1hLj7CTUMKZAAG7MBZJRks548.png-wh_500x0-wm_3-wmp_4-s_2379091928.png" target="_blank"></a>
說明:首先從日志中取出最後10M的日志,然後過濾帶有"error"的行;然後取目前時間戳,用getline将目前時候戳放入newTS變量;然後使用 date -d 将每行日志中的固定時間 轉換成%s (時間戳)格式,并放入變量ts中;最後判斷目前時間戳減去日志時間戳是否大于600s,并輸出最終結果。
7、Shell函數傳回值常用的兩種方式:return,echo
1) return 語句
shell函數的傳回值,可以和其他語言的傳回值一樣,通過return語句傳回
注意:return隻能用來傳回整數值,且和c的差別是0傳回為正确,其他的值為錯誤。
2)echo 傳回值
其實在shell中,函數的傳回值有一個非常安全的傳回方式,即通過輸出到标準輸出傳回。因為子程序會繼承父程序的标準輸出,是以,子程序的輸出也就直接反應到父程序。一定要注意,不要向标準輸出傳送一些不是結果的資訊(也就是說,不要随便echo一些不需要的資訊),比如調試資訊 (這些排程資訊可以重定向到一個檔案中解決),是以在使用類似grep 的指令時 要記得加上 >/dev/null 2>&1 來接收這些輸出資訊,避免這些指令的輸出
8、公司更新jdk總結
[root@template-jp ~]# tar xfz jdk-9-ea+146_linux-x64_bin.tar.gz
[root@template-jp ~]# ls
jdk-9 jdk-9-ea+146_linux-x64_bin.tar.gz
[root@template-jp ~]# cp -r jdk-9 /usr/java/
[root@template-jp ~]# cd /usr/java/
[root@template-jp java]# ll
total 16
lrwxrwxrwx 1 root root 16 Jan 19 2016 default -> /usr/java/latest
drwxr-xr-x 8 root root 4096 Jan 19 2016 jdk1.7.0_80
drwxr-xr-x 9 root root 4096 Nov 8 13:53 jdk1.8.0_112
drwxr-xr-x 9 root root 4096 Nov 7 16:48 jdk1.8.0_77
drwxr-xr-x 8 root root 4096 Dec 8 12:10 jdk-9
lrwxrwxrwx 1 root root 22 Nov 8 13:53 latest -> /usr/java/jdk1.8.0_112
[root@template-jp java]# rm latest -f
[root@template-jp java]# ln -s /usr/java/jdk-9 latest
lrwxrwxrwx 1 root root 15 Dec 8 12:10 latest -> /usr/java/jdk-9
[root@template-jp java]# java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+146)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+146, mixed mode)
[root@template-jp java]# 如果此時檢視到的目前版本不正确,需要使用alternatives設定目前版本指向latest
[root@template-jp java]# alternatives --config java
There are 4 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
* 2 /usr/java/jdk1.8.0_91/jre/bin/java
+ 3 /usr/java/latest/bin/java
4 /usr/java/jdk-9/bin/java
Enter to keep the current selection[+], or type selection number: 3
[root@template-jp java]#
注意:在解壓 jdk-9-ea+146_linux-x64_bin.tar.gz 檔案時盡量避免 使用-C參數直接解壓到/usr/java目錄中,也盡量避免把解壓後的 jdk-9 目錄直接使用mv 指令移動到/usr/java 目錄,以上兩種操作方法會導緻 /usr/java/jdk-9/ 目錄下内容owner和group的異常,如下圖所示:
<a href="http://s1.51cto.com/wyfs02/M02/8B/62/wKiom1hLieSwpYU8AALLM8bL5-k757.png-wh_500x0-wm_3-wmp_4-s_678012454.png" target="_blank"></a>
9、關于awk 引用shell 變量的應用
關于awk 調用shell變量的方法很多,個人習慣使用-v選項,如下所示:
[root@zayhu01-mb ~]# df -h | awk -v threshold=$threshold -F"[ %]" '/data/{if($(NF-2)>threshold)print $0}'
<a href="http://s2.51cto.com/wyfs02/M00/8B/5E/wKioL1hLjCeCj_m0AAEVeVp_Snc841.png-wh_500x0-wm_3-wmp_4-s_1785149196.png" target="_blank"></a>
10、關于php 的緩存技術
早期的php需要借助eAccelerate或Xcache相關軟體實作opcode緩存,進而提高速度;針對PHP5.5等進階版本,編譯時需要加上--enable-opcache參數,PHP就會自帶opcode 緩存功能。相關配置如下:
[root@nginx01-mb ~]# vim /usr/local/php-5.5.20/php.ini
opcache.enable=1
zend_extension=/usr/local/php-5.5.20/lib/php/extensions/no-debug-non-zts-20121212/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
[root@nginx01-mb ~]# service php-fpm restart
11、磁盤空間未釋放
近期nginx03-fk總是提示磁盤已滿,但已經把相關資料及log清除,系統還是提示磁盤已滿。仔細檢視發現删除檔案後磁盤空間并未釋放。解決方法:重新開機相關app ,例 service nginx restart
本文轉自 meteor_hy 51CTO部落格,原文連結:http://blog.51cto.com/caiyuanji/1881445,如需轉載請自行聯系原作者