logrotate实现多站点nginx日志切割

nginx日志默认生成在指定的一个文件日志里,久而久之文件会越来越大不利于查看和管理

目前有以下几个方案可以进行nginx日志的切割:

一、安装修改版本的nginx,可实现日志自动按天记录。不过此方法需要重新编译nginx,不适合现有业务进行操作

二、配置shell脚本,当前网上最普遍的方法。不过此方法一个脚本只支持一个日志的切割,并不适合多个站点的切割。

多个站点日志切割需要逐个配置域名,相应的有python脚本实现方式,也只是将shell脚本改为python脚本格式。

三、logrotate方式切割日志,系统自动执行,可对日志进行压缩,目前认为是最好的方式。

#vi  /etc/logrorate.d/nginx

配置如下:

/data/wwwlogs/*nginx.log {   #多个目录可空格隔开
daily                  #每日执行
rotate 31           #保留31个日志
missingok          #跳过不存在的日志
dateext             #以日期为结尾重命名日志文件
compress
notifempty
sharedscripts
postrotate         #只执行一次下面的脚本
[ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}

每天执行的时间由cron管理,测试大部分在凌晨3点左右,时间可在/etc/crontab中修改

增加59 23 * * * root run-parts /etc/cron.daily即可

测试命令:/usr/sbin/logrotate -d /etc/logrotate.d/nginx

 

查看分割记录cat /var/lib/logrotate.status

OSA安装过程中提示运行“install/auto_prepare.sh”安装错误

对于OSA安装过程中进行到如下步骤要求运行install/auto_prepare.sh

OSA

按提示在中断运行install/auto_prepare.sh后提示以下错误

install error!
Your script into the path:/dev/pts/0/osa/ctrlphp/install or /dev/pts/0/osa/.
exp: /usr/local/osa/auto_prepare.sh or /usr/local/osa/ctrlphp/install/auto_prepare.sh .

经排查为auto_prepare.sh脚本中获取脚本路径出错,修改auto_prepare.sh脚本

将第9行:

INSTALL_PATH=$(dirname $(readlink /proc/$$/fd/255))

更改为:

INSTALL_PATH=$(dirname $(dirname $(pwd)))

然后重新执行脚本即可。

osa_install

Linux下批量查找并执行命令

以批量设置文件夹所有人为例:

find ./ -name html -type d -exec chown -R www-data:www-data {} \;

./表示要查找的目录,此处表示在当前目录下查找

html表示要查找的目录或文件名

-type d 表示只查找文件夹

-exec 命令 {} \; 表示对查找结果要执行的命令

注意:此处{}和\;之间要有空格,否则会报“遗漏 ·-exec·命令”

chown -R www-data:www-data 是要执行的命令,此处指更改目录及其子目录的所有者为www-data

 

 

Apache反向代理配置

1、修改APACHE配置文件httpd.conf

修改加载模块

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

2、修改虚拟目录配置httpd-vhost.conf

<VirtualHost>

ServerName ?www.test.com #设置需要代理的域名

ServerAias ?www.test.com

<Proxy http://www.test.com>

Options MultiViews

AllowOverride None

Order allow,deny

Allow from all

</Proxy>

ProxyPass / http://192.168.0.2/ ? ?#设置代理目标服务器及访问的目录

ProxyPassReverse / http://192.168.0.2/

ErrorLog “/log/www.test.com-error.log”

Transferlog “/log/www.test.com-access.log”

</VirtualHost>

3、重启apache服务器生效

cd /data/apache/bin

./apachectl restart

Apache创建虚拟目录

1、首先查看httpd.conf或/etc/apache2/apache2.conf文件是否开启LoadModule alias_module modules/mod_alias.so模块

修改httpd.conf或者/etc/apache2/mods-available/alias.conf文件:

找到<IfModule alias_module>标签,在标签内加上

#格式为:Alias 别名 ?路径。即通过http://域名/demo/ 来访问f:/www/下的站点或页面

Alias /demo/ “f:/www/”

<Directory “f:/www/”>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>

 

重启apache服务生效

关闭SELinux防火墙方法

系统版本:CentOS 6.4

在安装防护应用的时候系统提示“Detected SELinux opening,close and then install!

1、连接服务器后输入命令getenforce查看SELinux运行状态

如果不为disable则为运行中

2、更改启动配置文件

2

vim /boot/grub/menu.lst

3

在编辑器中rhgb quiet 后加上selinux=0,保存并退出。

*vim编辑器使用方法可参照“ubuntu系统下的mysql数据库自动备份”一文

3、输入命令?reboot?重启服务器

4

4、重新连接服务器,并输入getenforce命令查看SELinux运行状态

1

结果显示Disabled说明SELinux已经关闭

Ubuntu系统下的Mysql数据库自动备份

1、SSH远程连接至数据库服务器

2、登录Mysql数据库,创建备份用户帐号并赋予权限

切换目录:cd /usr/bin/

连接MYSQL数据库(帐号root 密码123456):mysql -u root -p123456

创建备份用户’backup’密码’sT6pQx8Z’并赋予所有权限:

mysql>grant all on *.* to backup@localhost identified by ‘sT6pQx8Z’;

mysql>flush privileges;

提示成功后,输入exit退出mysql连接。

3、修改mysql_backup.sh自动备份脚本内的db_user、db_password和db_host参数保存

4、通过FTP上传mysql_backup.sh脚本到/usr/bin/目录下

脚本下载地址:mysql自动备份脚本

5、在系统根目录下创建mysqlbak文件夹,如果使用其他命名请同时修改脚本内backup_dir参数

6、为/mysqlbak目录和mysql_backup.sh文件赋予权限

chmod 777 /mysqlbak

chmod 777 /usr/bin/mysql_backup.sh

7、创建计划任务

输入命令 crontab -e 编辑计划任务

按键盘“插入insert”按键切换到插入编辑模式,左下角提示“插入”

crontab

光标移动到最下方一行,去掉“#”号,并添加计划任务,格式如下

分钟 ? 小时 ? 日 ? ?月 ? ?星期 ? ?执行的命令

50 ? ? ? ? 1 ? ? ? ?* ? ? ?* ? ? ? * ? ? ? ?/usr/bin/mysql_backup.sh

以上任务为每天1点50分执行/usr/bin/mysql_backup.sh脚本

编辑完成后先按ESC键,然后按shift+: ?再输入 :wq 保存并退出编辑

输入命令crontab -l 可查看创建的计划任务列表。

crontab02

 

*如果出现no permission错误,则是文件或文件目录权限问题,赋予权限即可

*如果出现no such file or directory错误,则使用utral edit转换脚本文件编码:DOS=>UNIX即可

LINUX文件权限的认识

1.Linux文件权限采用UGO模式控制,即U(用户)、G(组)、O(其他);

权限分为:

R 表示read,可读。对应十进制数4,即2?

W 表示write,可写。对应十进制数2,即2?。

X 表示exe,可执行。对应十进制数1,即2?。

2.每个文件拥有一个所属用户(U)和所属组(G),不属于该文件所属用户或所属组的使用第三组O权限;

3.RWX三个权限为一组,对应UGO分别设置:

如RWX RWX R-X:

“-”表示无该权限;

第一组RWX对应U位置表示用户权限可读可写可执行,换算为十进制数为4+2+1=7;

第二组RWX对应G位置表示组权限可读可写可执行,换算为十进制数为4+2+1=7;

第三组R-X对应O位置表示不属于该文件所属用户和组时可读可执行,换算为十进制数为4+1=5;

所以RWXRWXR-X的数值化权限为775;

 

使用ls -l 命令可查看当前目录的文件及文件夹信息

LINUX文件权限

其中“-”开头的表示文件、“d”开头的表示目录;

从左往右依次表示: 文件/目录UGO权限 ? ? ? inode硬连接数 ? ? ?所属用户 ? ? 所属组 ? ?文件大小 ? ?时间 ? ?文件/目录名

inode硬连接数:文件的硬连接数为1,目录的硬连接数表示其子目录数+2(./和../);可使用ls -i命令查看inode标识号。

修改权限命令:chmod
使用方式?:?chmod?[-cfvR]?[–help]?[–version] mode?file
参数?:
mode?:?权限设定字串,格式如下?:?[ugoa…][[+-=][rwx]…][,…],其中
u?表示该文件所属用户,g?表示文件所属组,o?表示不属于改文件所属用户和组的访问者,a?表示全部。
+?表示增加权限、-?表示取消权限、=?表示唯一设定权限。
-c?:?如果文件权限更改成功,才显示其更改动作
-f?:?如果更改权限不成功不显示错误信息
-v?: 显示权限变更详细信息
-R?:?将权限应用到当前目录下所有子目录和文件
–help?:?显示帮助说明
–version?:?显示版本信息