crontab

;每天早晚8点同步授时中心的时间
0 8,20 * * * ntpdate asia.pool.ntp.org >> /script/crontab.log

;每1分钟执行一次shell脚本,检测server的master进程是否存活,如果存在则跳过。如果发现主进程已经挂掉,则执行restart逻辑,先kill掉所有残留的子进程,然后重新启动Server。
*/1 * * * * /script/check_system_server.sh

;每天0点到8点每4小时执行一次reload.sh 保持mysql不断线
* 0-8/4 * * * /script/reload.sh

;每天下午3点执行
* 15 * * * /usr/local/php/bin/php /script/t.php >> /script/crontab.log

说明:
systemctl start crond
systemctl stop crond
systemctl restart crond
systemctl reload crond
systemctl status crond

开机自启动: systemctl enable crond.service

查看当前用户的crontab: 输入crontab -l 或 crontab -l -u root

编辑: crontab -e

格式: Minute Hour DayofMonth Month DayofWeek CommandPath

参数说明:
Minute:每个小时的第几分钟执行该任务;取值范围0-59
Hour:每天的第几个小时执行该任务;取值范围0-23
Day:每月的第几天执行该任务;取值范围1-31
Month:每年的第几个月执行该任务;取值范围1-12
DayOfWeek:每周的第几天执行该任务;取值范围0-6,0表示周末
CommandPath:指定要执行的程序路径

时间格式:
* :表示任意的时刻;如小时位 * 则表示每个小时
n :表示特定的时刻;如小时位 5 就表示5时
n,m :表示特定的几个时刻;如小时位 1,10 就表示1时和10时
n-m :表示一个时间段;如小时位 1-5 就表示1到5点
*/n : 表示每隔多少个时间单位执行一次;如小时位 */1 就表示每隔1个小时执行一次命令,也可以写成 1-23/1

实例:
30 21 * * * /etc/init.d/nginx restart //每晚的21:30重启 nginx。
45 4 1,10,22 * * /etc/init.d/nginx restart //每月1、 10、22日的4 : 45重启nginx。
10 1 * * 6,0 /etc/init.d/nginx restart //每周六、周日的1 : 10重启nginx。
0,30 18-23 * * * /etc/init.d/nginx restart //每天18 : 00至23 : 00之间每隔30分钟重启nginx。
0 23 * * 6 /etc/init.d/nginx restart //每星期六的11 : 00 pm重启nginx。
* */1 * * * /etc/init.d/nginx restart //每一小时重启nginx
* 23-7/1 * * * /etc/init.d/nginx restart //晚上11点到早上7点之间,每 隔一小时重启nginx
0 11 4 * mon-wed /etc/init.d/nginx restart //每月的4号与每周一到周三 的11点重启nginx
0 4 1 jan * /etc/init.d/nginx restart //一月一号的4点重启nginx
*/30 * * * * /usr/sbin/ntpdate 210.72.145.20 //每半小时同步一下时间

用ChrootDirectory限制SFTP登录的用户只能访问指定目录且不能进行ssh登录

useradd -d /data/html/test1 -s /sbin/nologin test1 添加用户test1 不能ssh登录
passwd test1 // 修改用户密码
vim /etc/ssh/sshd_config
#Subsystem	sftp	/usr/libexec/openssh/sftp-server //将原先的注释掉

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

Subsystem	sftp	internal-sftp
Match User test1
ForceCommand	internal-sftp
ChrootDirectory	/data/html/test1/
ChrootDirectory配置的主目录权限问题,需特别注意这两点:
1. ChrootDirectory所指向的文件夹,属主必须是root,属组是sftp用户所属的用户组。
2. ChrootDirectory所指向的文件夹到系统根路径上的所有途径文件夹,属主都必须是root,且权限不允许有群组用户写入权限,即权限只能为750或755,如果任意一个是777,则会出现连接失败的问题

chown root:test1 /data/html/test1
chown -R 777 /data/html/test1/child/ //必须在test1的目录下新增一个给test1权限的问题,不能就会出现只能读不能写
最后执行
systemctl restart sshd.service

如果出现错误,执行sshd -t 查看原因

/etc/bashrc 和 /etc/profile 和 .bash_profile 的区别是什么

/etc/profile
推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;
/root/.bashrc
修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的.bashrc文件就可以了。
1./etc/bashrc,用户目录下.bashrc有什么区别?  
一个是针对整个系统所有用户的,一个是针对特定用户的./etc/bashrc修改了以后要重启系统才生效,而用户目录下.bashrc修改了以后重新登录就生效  
2./etc/profile与/etc/bashrc的区别?  
前一个主要用来设置一些系统变量,比如JAVA_HOME等等,后面一个主要用来保存一些bash的设置.   
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 
并从/etc/profile.d目录的配置文件中搜集shell的设置.  
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.  
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该  
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.  
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该  
该文件被读取.  
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.  
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.  
~/.bash_profile 是交互式、login 方式进入 bash 运行的  
~/.bashrc 是交互式 non-login 方式进入 bash 运行的  
通常二者设置大致相同,所以通常前者会调用后者。  
.bash_profile 文件在通过控制台(或远程登录, 比如ssh)登录(login)系统的时候被执行的shell脚本.  
而 .bashrc 则是在打开虚拟终端的时候才会起作用,比如在GNOME,KDE中执行rxvt

OpenResty安装

源码编译
去http://openresty.org/cn/download.html页面下载

wget https://openresty.org/download/openresty-1.13.6.1.tar.gz
tar -xzvf openresty-1.13.6.1.tar.gz
cd openresty-1.13.6.1/
./configure
make -j2
sudo make install

安装后

cd /usr/local/openresty/nginx/sbin
./nginx start

将nginx添加到PATH变量中

PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH

============================================

运行下面的命令就可以添加OpenResty的仓库
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

sudo yum install -y openresty

sudo yum install -y openresty-resty


列出所有 openresty 仓库里头的软件包:
sudo yum --disablerepo="*" --enablerepo="openresty" list available

复制
cp /usr/local/openresty/nginx/sbin/nginx /usr/local/bin
nginx -v

参考:http://openresty.org/cn/linux-packages.html

Linux 查看CPU

Linux使用命令

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

压力测试工具

压力测试
压力测试必须在上线前测试 因为很耗内存

注意:在安装webbench前确认已安装了gcc ctags
yum -y install gcc ctags

1、webbench
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

报错:cannot create regular file ‘/usr/local/man/man1’: No such file or directory
mkdir /usr/local/man

测试
webbench -c 200 -t 30 http://xxx.com/
参数说明:
-c表示并发数
-t 表示时间(秒)

2、Apache bench

yum install httpd-tools
ab -c 1000 -n 2000 http://xxx.com

参数说明:
格式:ab [options] [http://]hostname[:port]/path

-n requests Number of requests to perform //本次测试发起的总请求数
-c concurrency Number of multiple requests to make   //一次产生的请求数(或并发数)
-t timelimit Seconds to max. wait for responses    //测试所进行的最大秒数,默认没有时间限制。
-r Don’t exit on socket receive errors. // 抛出异常继续执行测试任务
-p postfile File containing data to POST  //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt

-T content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
-v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
-w Print out results in HTML tables  //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)

git源码编译

–查看已安装的软件版本
rpm -qa | grep mysql

–删除已安装git
yum remove git

–git版本包列表
https://www.kernel.org/pub/software/scm/git/
–下载
wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

yum install -y gcc gcc-c++
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

tar zxvf git-2.9.5.tar.gz
cd git-2.9.5/
make prefix=/usr/local all
sudo make prefix=/usr/local install

添加环境
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc

查看版本
git  --version

参考:
https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git