2023年7月

装一网站,需要配置php-fpm,我经常开发,却不常运维,很是头大。
当前环境centos7+php7.4+nginx。
安装zip依赖后,需要重启下。

重启方法

master进程可以理解以下信号:

  • INT, TERM 立刻终止
  • QUIT 平滑终止
  • USR1 重新打开日志文件
  • USR2 平滑重载所有worker进程并重新载入配置和二进制模块

方法一

  1. 先查看php-fpm的master进程id:
    ps aux | grep php-fpm | grep master | grep -v grep
  2. 再重启php-fpm:
    kill -USR2 master进程id

方法二

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf(可能有的是/etc/php5/fpm/php-fpm.conf)这个配置文件,cat /usr/local/php/etc/php-fpm.conf看到:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid

pid文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 master进程id重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

添加到系统服务

创建文件 php-fpm.service

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFILE=/var/run/php-fpm.pid
ExecStartPre=/usr/bin/rm -f $PIDFILE
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecRestart=/bin/kill -USR2 $PIDFILE
ExecStop=/bin/kill -SIGINT $PIDFILE
[Install]
WantedBy=multi-user.target

复制到这个位置 cp php-fpm.service /etc/systemd/system/php-fpm.service

开机启动

systemctl enable php-fpm.service

Linux改动php.ini后如何重启php-fpm
Centos7下的php-fpm系统服务脚本

近日一服务器磁盘占满 , 清理日志。发现 /var/log/journal 目录占用4.1G空间,但又是系统目录,不可妄删。
此目录为 journalctl 工具所创建的。

以下为 journalctl 命令自动维护文件大小的命令

  • journalctl --disk-usage 查看磁盘占用
  • journalctl --vacuum-time=1w 保留一周日志
  • journalctl --vacuum-size=500M 只保留500MB的日志

还可以删除目录下文件,然后重启journalctl
重启方法为 systemctl restart systemd-journald.service

Linux 系统 /var/log/journal/ 垃圾日志清理
Linux系统查看日志命令journalctl的一些用法

本地安装好nginx,php 不用启动。
修改下面文件路径配置 可做到 php多版本兼容

// bat 文件
@echo off
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
set PHP_FCGI_MAX_REQUESTS = 1000
echo Starting PHP FastCGI...
rem 下面这里的分别替换成你的php-cgi.exe和php.ini的路径 ,后面的-b,-c等参数必须保留且注意前后空格

RunHiddenConsole.exe E:/Server/phps/php-5.6.17-Win32-VC11-x64/php-cgi.exe -b 127.0.0.1:9956 -c E:/Server/phps/php-5.6.17-Win32-VC11-x64/php.ini 
RunHiddenConsole.exe E:/Server/phps/php-7.2.34-Win32-VC15-x64/php-cgi.exe -b 127.0.0.1:9972 -c E:/Server/phps/php-7.2.34-Win32-VC15-x64/php.ini 
RunHiddenConsole.exe E:/Server/phps/php-7.4.26-Win32-vc15-x64/php-cgi.exe -b 127.0.0.1:9974 -c E:/Server/phps/php-7.4.26-Win32-vc15-x64/php.ini 
RunHiddenConsole.exe E:/Server/phps/php-8.0.22-nts-Win32-vs16-x64/php-cgi.exe -b 127.0.0.1:9980 -c E:/Server/phps/php-8.0.22-nts-Win32-vs16-x64/php.ini 
RunHiddenConsole.exe E:/Server/phps/php-8.1.9-nts-Win32-vs16-x64/php-cgi.exe -b 127.0.0.1:9981 -c E:/Server/phps/php-8.1.9-nts-Win32-vs16-x64/php.ini 
echo Starting nginx...
rem 注意替换成你的nginx目录
RunHiddenConsole.exe  E:\Server\nginx-1.16.1/nginx.exe -p E:\Server\nginx-1.16.1/
msg %username% /time:3 本地服务已启动~~

由于访问量过高导致问题,偶发。
查看nginx的error.log tac error.log|grep "error"|less
发现许多如下重复的错误内容

2023/07/10 09:54:35 [error] 24656#0: *14 connect() to unix:/tmp/php-71-cgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 101.xx.220.xxx, server: xxx.xx, request: "POST /xxx/xxx HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-71-cgi.sock:", host: "xxx.xx"
2023/07/10 09:54:35 [error] 24656#0: *14 connect() to unix:/tmp/php-71-cgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 101.xx.220.xxx, server: xxx.xx, request: "POST /xxx/xxx HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-71-cgi.sock:", host: "xxx.xx"
2023/07/10 09:54:35 [error] 24656#0: *14 connect() to unix:/tmp/php-71-cgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 101.xx.220.xxx, server: xxx.xx, request: "POST /xxx/xxx HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-71-cgi.sock:", host: "xxx.xx"

出现问题的大概原因为访问量过高
nginx之php-fpm优化
网站请求异常502 php-fpm.sock failed (11: Resource temporarily unavailable) while conne

优化一商城列表搜索页,同事发来一篇文章。嗯,搞。
加权排序类似于加权平均,有所侧重。
在商城中,商品名称,关键词,规格,商品描述等类似于一片片文章。
希望名称,关键词的权重高于描述。找到用户更想查询到的数据。

SELECT
 1 * ( document.w10 + document.w20 + document.w30 ) 
* ( document.w11 + document.w21 + document.w31 ) AS w,
 document.*
FROM
 (
  SELECT
   0,
   CASE WHEN d.abstracts LIKE '%1%' THEN
    2 ELSE 0.1
    END AS w10,
   CASE WHEN d.tags LIKE '%1%' THEN 
    3 ELSE 0.1
    END AS w20,
   CASE WHEN d.NAME LIKE '%1%' THEN
    4 ELSE 0.1
    END AS w30,
   CASE WHEN d.abstracts LIKE '%2%' THEN
    2 ELSE 0.1
    END AS w11,
   CASE WHEN d.tags LIKE '%2%' THEN
    3 ELSE 0.1
    END AS w21,
   CASE WHEN d. NAME LIKE '%2%' THEN
    4 ELSE 0.1
    END AS w31,
   d.*
 FROM
  document d 
) document LEFT JOIN document dd ON document.id = dd.id
 ORDER BY
 w DESC,
 dd.create_time DESC

其上大意为: 有关键词 1, 2 同时搜索。

  • 名字(NAME) 包含 的权重为 4;
  • 标签tag包含的权重为3;
  • 描述babstracts包含的权重为2;
  • 默认权重为0;
    把所有的权重的积做排序,值大的为接近的最为靠前。
    还可做其他方面的权重,例如关键字在标题中位置等权衡顺序。

2014.09.23 mysql 一条sql语句实现实现搜索功能(加权排序)