nginx日志文件的切割 & /bin/bash^M: bad interpreter: No such file or directory

时常收到阿里的提示,登录上服务器看看日志吧,发现文件好大,读取都要半天。。。。
百度了一下怎么按日期存储。。。。
记录下过程:
编写移动log文件shell

  1. #!/bin/bash  
  2. ## 零点执行该脚本  
  3.   
  4. ## Nginx 日志文件所在的目录  
  5. LOGS_PATH=/alidata/log  
  6.   
  7. ## 获取昨天的 yyyy-MM-dd  
  8. YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)  
  9.   
  10. ## 移动文件  
  11. mv ${LOGS_PATH}/mysql/slow.log ${LOGS_PATH}/mysql/slow_${YESTERDAY}.log  
  12. mv ${LOGS_PATH}/nginx/error.log ${LOGS_PATH}/nginx/error_${YESTERDAY}.log  
  13. mv ${LOGS_PATH}/nginx/access/default.log ${LOGS_PATH}/nginx/access/default_${YESTERDAY}.log  
  14. mv ${LOGS_PATH}/nginx/access/bbs.log ${LOGS_PATH}/nginx/access/bbs_${YESTERDAY}.log  
  15. mv ${LOGS_PATH}/nginx/access/vod.log ${LOGS_PATH}/nginx/access/vod_${YESTERDAY}.log  
  16. mv ${LOGS_PATH}/nginx/access/dz.log ${LOGS_PATH}/nginx/access/dz_${YESTERDAY}.log  
  17. mv ${LOGS_PATH}/php/php-fpm.log ${LOGS_PATH}/php/php-fpm_${YESTERDAY}.log  
  18. mv ${LOGS_PATH}/php/php-fpm-slow.log ${LOGS_PATH}/php/php-fpm-slow_${YESTERDAY}.log  
  19.   
  20. ## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件  
  21. kill -USR1 $(cat /alidata/server/nginx/logs/nginx.pid)  

将 alidata/log 目录下的mysql php nginx下的所有log 存为 XXX_[yyyy-MM-dd].log 的文件。

脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut.sh,之后使用 crontab -e 新增一个定时任务,在其中增加执行这个脚本:

  1. 0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh  

前面两个数字分别是 分 时 后面 *** 每天
Ctrl+O保存 Ctrl+X退出后手动执行了下脚本,第一次提示没权限
chmod后再次执行提示 /bin/bash^M: bad interpreter: No such file or directory
脚本是在windows下编辑上传的,出现上面错误的原因之一是脚本文件是DOS格式的,即每一行的行尾以\r\n来标识, 使用vim编辑器打开脚本, 运行:
:set ff?
可以看到set ff=dos的字样. 使用:set ff=unix把它强制为unix格式的, 然后wq存盘退出, 即可.

未经允许不得转载:ganlei的个人博客 » nginx日志文件的切割 & /bin/bash^M: bad interpreter: No such file or directory

赞 (1)
分享到:更多 ()