php 中php-fpm 的重启、终止操作命令

常用命令

  • 重启 Nginx

    service nginx restart
  • 重启 php-fpm

    service php-fpm restart
  • 查看php-fpm进程数

    ps aux | grep -c php-fpm
  • 查看php运行内存

    /usr/bin/php  -i | grep mem
  • 查看php编译参数

    /usr/bin/php  -i | grep Configure
  • 重启php-fpm

    /etc/init.d/php-fpm restart

查找配置

首先要找到php-fpm.conf配置文件,查看pid的配置路径(不是安装路径),然后把下面对应的地方改掉才能正常执行。

ps aux | grep php-fpm  
root     11799  0.0  0.0 103248   880 pts/0    S+   13:51   0:00 grep --color php-fpm
root     11973  0.0  0.0 417748   964 ?        Ss   Jun01   0:20 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

cat /etc/php-fpm.conf

看到

pid = /var/run/php-fpm/php-fpm.pid

php-fpm配置测试

/usr/local/php/sbin/php-fpm -t
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t

php-fpm 启动:

/usr/local/php/sbin/php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

php-fpm 关闭:

kill -INT `cat /var/run/php-fpm/php-fpm.pid`

php-fpm 重启:

kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`

查看php-fpm进程数:

ps aux | grep -c php-fpm

Link: php 中php-fpm 的重启、终止操作命令

Nginx Access Log日志统计分析常用命令

IP相关统计

统计IP访问量

awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的IP访问量(4-5点)

grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l

查看访问最频繁的前100个IP

awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100

查看访问100次以上的IP

awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

查询某个IP的详细访问情况,按访问频率排序

grep '104.217.108.66' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100

页面访问统计

查看访问最频的页面(TOP100)

awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100

查看访问最频的页面([排除php页面】(TOP100)

grep -v ".php"  access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100

查看页面访问次数超过100次的页面

cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

查看最近1000条记录,访问量最高的页面

tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less

每秒请求量统计

统计每秒的请求数,top100的时间点(精确到秒)

awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100

每分钟请求量统计

统计每分钟的请求数,top100的时间点(精确到分钟)

awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100

每小时请求量统计

统计每小时的请求数,top100的时间点(精确到小时)

awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100

性能分析

在nginx log中最后一个字段加入$request_time

列出传输时间超过 3 秒的页面,显示前20条

cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20

列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条

cat access.log|awk '($NF > 1 &&  $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

蜘蛛抓取统计

统计蜘蛛抓取次数

grep 'Baiduspider' access.log |wc -l

统计蜘蛛抓取404的次数

grep 'Baiduspider' access.log |grep '404' | wc -l

TCP连接统计

查看当前TCP连接数

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

Link: Nginx Access Log日志统计分析常用命令

Linux 下如何退出 tmux 和重新进入 tmux

tmux是一个优秀的终端复用软件

进入 tmux

tmux

退出(detach)当前tmux

ctrl+d

重新进入tmux

tmux attach -t <target-session>

如:当前有很多session,那么选择哪一个呢?

  1. 使用命令tmux ls来获取target-session
tmux ls
1: 1 windows (created Tue Jan 17 09:28:05 2019) [207x86]
13: 1 windows (created Tue Jan 17 17:49:10 2019) [207x86]
16: 1 windows (created Thu Jan 17 10:41:44 2019) [207x86]
19: 5 windows (created Tue Jan 17 10:53:06 2019) [207x86]
  1. 进入target-session为13的窗口
tmux attach -t 13

更多使用方式,参考百度百科

Link: linux下如何退出tmux和重新进入tmux

Ubuntu安装 GoAccess 分析 Nginx 日志

对于一个网站而言,网站日志能够反映很多问题,诸如用户访问情况,页面浏览情况,页面命中情况等,可以给我们继续优化网站提供很好的分析支持。

GoAccess 是一个性能优良的网站访问日志开源工具,通过它,我们能以可视化的方式来分析网站日志信息。

下面是在 Ubuntu 上安装 GoAccess 来分析 access.log 文件的一点分享。

安装 GoAccess

  • 使用以下命令安装 GoAccess:

    sudo apt install goaccess
  • 查看 GoAccess 是否安装成功
goaccess -V

GoAccess - 1.2.
For more details visit: http://goaccess.io
Copyright (C) 2009-2016 by Gerardo Orellana

看到上面的输出信息,说明我们已经安装好了 GoAccess

配置 NginxGoAccess 日志格式

  • 配置 Nginx 日志格式

打开 /etc/nginx/nginx.conf 配置文件,在日志文件下添加如下配置信息:

##
# Logging Settings
##

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

保存 Nginx 配置信息并重启 Nginx

  • 配置 GoAccess 日志格式

打开 GoAccess 配置文件: /etc/goaccess.conf,添加以下配置:

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^ %^ [%d:%t %^] "%r" %s %b "%R" "%u" %^

保存配置文件

分析 access.log 文件并输出为 html 文件

使用以下命令,开始分析 access.log 文件,并输出为 html 文件进行可视化分析:

goaccess access_blog.xsir.com.log -o /home/html/logs/report.html --time-format='%H:%M:%S' --date-format='%d/%b/%y' --log-format=COMBINED --real-time-html
access_blog.xsir.com.log 是需要分析的日志文件,因为我在log文件夹下,所以没有带目录
/home/html/logs/report.html 是输出 html 文件路径
--real-time-html 是实时输出

配置目录查看输出的 html 文件

打开 Nginx 配置文件,在站点配置文件下,添加以下配置信息:

location /report.html {
    alias /home/html/test/report.html;
}

现在我们可以通过访问网站 blog.xsir.com/report.html 查看网站的实时日志

后台运行 GoAccess

我们可以借助 tmux 来使 GoAccess 后台运行:

使用以下命令安装 tmux:

apt install tmux

安装好后,输入以下命令,进入 tmux:

tmux

goaccess access_blog.xsir.com.log -o /home/html/logs/report.html --time-format='%H:%M:%S' --date-format='%d/%b/%y' --log-format=COMBINED --real-time-html

一切正常的话 GoAccess 应该开始分析日志文件了,然后显示 “WebSocket server ready to accept new client connections”。
现在按下你 Tmux 的 PREFIX 键(默认是 Ctrl+B),再按 d 从 Tmux 中脱离出来,这样即使 ssh 断开连接了也能保持后台运行。

想查错也可以用以下命令查看刚才编辑的命令:

tmux attach

更多 GoAccess 使用技巧,参考官网手册。https://goaccess.io/

That's All.

Ubuntu查看端口使用情况

Ubuntu 查看指定端口使用情况,可以使用以下命令:

lsof -i:8080

当然,也可以使用下面的命令进行查看:

netstat -ap | grep 8080
PS: 我更喜欢使用上面一种方式,因为他更加好记 ^_^

如果要关闭使用这个端口的程序,使用kill + 对应的pid,如下:

kill -9 PID号
PS: kill就是给某个进程id发送了一个信号。默认发送的信号是SIGTERM,而kill -9发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
以下命令也是常用的,顺道记下:
// 查看已经连接的服务端口(ESTABLISHED)
netstat -a

// 查看所有的服务端口(LISTEN,ESTABLISHED)
netstat -ap

通过Xcode查看真机中应用程序的数据文件

有时候开发调试时,需要查看真机中应用的文件,比如sqlite之类的,可按以下步骤进行:

环境:Xcode Version 7.2.1,iPad2。

1)点击Xcode的Window菜单项,选择Devices选项。

2)点击左边设备一览中的iPad2,右边「Installed Apps」会显示出iPad上的所有第三方应用。

3)选中要查看的应用。

4)点击下面的设置按钮,选择「Download Container…」按钮,把应用数据下载到Mac上,生成一个.xcappdata文件。

5)在.xcappdata文件上点击右键,选择Show package contents 查看包内容,就可以看到真机应用程序的数据文件了。

Link: 【Xcode使用技巧】通过Xcode查看真机中应用程序的数据文件

Ubutnu 安装 Samba 服务器

Samba 是一个共享协议,支持不同主机间进行文件的共享访问

服务器版本:18.04

以下是在 Ubutnu 服务器上安装 Samba 服务器的步骤:

更新软件源

sudo apt update
sudo apt upgrade

安装Samba服务器软件

sudo apt install samba

安装完Samba服务器软件后,可以通过以下命令查看是否安装成功:

samba -V

如果显示以下内容,说明安装成功:

Version 4.7.6-Ubuntu

配置Samba

创建分享目录并配置相应权限

首先我们需要创建一个分享目录,譬如 share,我们执行以下命令创建分享目录:

mkdir /home/xsir/share

在创建了分享目录之后,我们需要给该目录配置相应的权限,这关系到我们对分享目录下文件的操作:

chmod 777 /home/xsir/share

创建分享用户账号

使用以下代码创建一个 Samba 用户,并根据提示信息,初始化密码:

sudo smbpasswd -a xsir

现在我们已经有一个用户名为:xsir 的用户,密码是你刚设置的密码。

配置 Samba 的配置文件

现在我们开始配置 Samba,使用以下命令打开 Samba 的配置文件并进行编辑:

sudo vim /etc/samba/smb.conf

在配置文件最后添加以下代码:

[share]
   comment = share folder
   browseable = yes
   path = /home/xsir/share
   create mask = 0700
   directory mask = 0700
   valid users = xsir
   force user = xsir
   force group = xsir
   public = yes
   available = yes
   writable = yes

这样我们对 Samba 的所有配置就都完成了。接下来我们需要重启下 Samba 服务器使刚才的配置生效即可。使用以下命令对 Samba 服务器进行重启:

sudo service smbd restart

下面我们就可以愉快的访问刚配置好的 Samba 文件服务器进行愉快的玩耍了。

  • Mac 使用快捷键 CMD + K 进入前往面板,在地址栏里输入 smb://192.168.0.89/share 输入用户名和密码就可以进行文件分享操作。
  • Windows 下使用快捷键 Windows徽标+R 进入运行窗口,在地址栏里输入 \\192.168.0.89 输入用户名和密码就可以进行文件分享操作。
PS: 我们可以对 Samba 共享文件夹映射网络驱动器,这样就可以在下次双击映射好的文件夹进入共享目录。
Mac 下直接将刚才的文件夹拖到左侧个人收藏下,Windows 选中文件夹右键进行映射操作

Link:

正则表达式匹配空行

测试所用的编辑器:notepad++,sublime

^(\s*)\r\n

根据文档格式(windows, mac, linux行尾符)不同 将其中的\r\n替换成不同行尾符

windows: ^(\s*)\r\n
linux: ^(\s*)\n
mac: ^(\s*)\n (mac 也是一种类linux系统)

方法二: 模式修饰符

/.*/s   其中的 /s修改点号的匹配范围, 使之可以匹配换行符

附:

正在表达式在行尾添加字符

\n

在替换处添加需要添加的字符

Link:

WKWebView文字图片自适应

我们在使用 WKWebView 时,图片和文字有时不会进行自适应屏幕,这样我们可以通过嵌入 JavaScript 代码的方式,达到文字图片自适应的效果。

文字自适应屏幕

文字自适应屏幕,可以在创建 WKWebView 的时候,添加 JS 代码实现
// 自适应屏幕宽度js
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
[wkUController addUserScript:wkUScript];
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
wkWebConfig.userContentController = wkUController;
WKWebView *contentWeb = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:wkWebConfig];

图片自适应屏幕

图片自适应屏幕可以在加载 HTML 代码前,拼接相应代码实现
NSString *htmlString = [NSString stringWithFormat:@"<html> \n"
    "<head><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no' charset=\"UTF-8\"> \n"
    "<style type=\"text/css\"> \n"
    "body {font-size:15px;}\n"
    "</style> \n"
    "</head> \n"
    "<body>"
    "<script type='text/javascript'>"
    "window.onload = function(){\n"
    "var $img = document.getElementsByTagName('img');\n"
    "for(var p in  $img){\n"
    "$img[p].style.width = '100%%';\n"
    "$img[p].style.height ='auto'\n"
    "}\n"
    "}"
    "</script>%@"
    "</body>"
    "</html>", html];

Link:

iOS 后台进入前台和进入后台通知

1. 注册通知

//后台进前台通知 UIApplicationDidBecomeActiveNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];

//进入后台UIApplicationDidEnterBackgroundNotification
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

2. 实现通知方法

//进入后台方法
- (void)didEnterBackground {
    NSLog(@"%@", NSStringFromSelector(_cmd));
}

//每次后台进前台都会执行这个方法
- (void)didBecomeActive {
    NSLog(@"%@", NSStringFromSelector(_cmd));
}

3. 移除通知

- (void)dealloc {
    [[NSNotificationCenter defaultCenter]removeObserver:self]; //移除通知
}