Linux嵌入式由于诸多的限制,调试方法有限,常常出现面对Bug束手无策的情况,现在介绍一种通过信号处理对Linux嵌入式应用程序进行调试的方法。

linux中一共有32种信号,在/usr/include/bits/signum.h 头文件中可以看到,具体如下:SIGHUP ;SIGINT ;SIGQUIT ;SIGILL ;SIGTRAP ;SIGABRT ;SIGIOT ;SIGBUS ;SIGFPE ;SIGKILL ;SIGUSR1 ;SIGSEGV ;SIGUSR2 ;SIGPIPE ;SIGALRM ;SIGTERM ;SIGSTKFLT ;SIGCLD ;SIGCHLD ;SIGCONT ;SIGSTOP ;SIGTSTP ;SIGTTIN ;SIGTTOU ;SIGURG ;SIGXCPU ;SIGXFSZ ;SIGVTALRM ;SIGPROF ;SIGWINCH ;SIGPOLL ;SIGIO ;SIGPWR ;SIGSYS ;SIGUNUSED
以上来自:https://blog.csdn.net/u010133805/article/details/53899667 ,他用的c++,改成c研究研究,如下:

看编号,用kill -l,SIGUSR1编号为10,如下所示:
#kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

其中SIGUSER1信号用户可以自己定义其处理行为,处理范例如下:

#make usr1
cc     usr1.c   -o usr1
./usr1

ps -ef|grep usr1

kill -s SIGUSR1 17331
sig_num=10
flag is true!
sig_num=10
flag is false
flag is false
Mac OS升级之后,使用Android studio 运行SVN出现如下错误:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
1
解决方式,打开命令行工具运行如下的命令:

xcode-select --install
---------------------
原文:https://blog.csdn.net/Zhangxichao100/article/details/76138145
附常用工具:

在线正则测试:http://tool.oschina.net/regex/

生成正则图片:https://regexper.com

==================================
在日常工作中,经常会用到正则操作。但是对于大多数人来说,操作正则表达式简直就是抓瞎。

本篇文章主要整理了正则表达式匹配的规则,使用中的一些要点,以及用图形化的方式列举出一些常见的正则表达式,希望能给大家带来一定的帮助,能在以后的工作中,用上正则,爱上正则。

PS:不同语言中的正则表达式的规则不完全相同,但是大部分都可以适用。

正则是什么
正则表达式是为了对字符串进行有效 数据提取 以及 匹配 的一种机制,字符串在匹配的过程中将会从第一个位置开始匹配,然后从左往右进行依次匹配,每尝试匹配一次,就会把控制权交由下一个位置,直到匹配结束。

正则表达式是由 普通字符(例如字符 a 到 z)以及 特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则的诞生
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为「神经网事件的表示法」的论文,引入了正则表达式的概念。

正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。

随后,人们发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。具有完整语法的正则表达式使用在字符的格式匹配方面上,后来被应用到熔融信息技术领域。自从那时起,正则表达式经过几个时期的发展,现在的标准已经被ISO(国际标准组织)批准和被Open Group组织认定。

匹配规则
下面将正则中的一些基本的匹配规则列出来如下表所示:



要点
贪与不贪
举个例子,假设有以下这段html字符,我想拿到a标签中的内容:

<a>
南京长江大桥
</a>
哈哈
<a>
南京市长江大桥
</a>

然后我写了这样一个正则: <a>(.)*</a>

在线测试的结果如下(注意:这个点包起来,*没有包起来):
<a>1212</a><a>2222</a>

这个结果与我们的预期不符,正常我应该得到两个匹配的结果才对,但是现在却只匹配到一个结果。

现在把刚刚的正则改成这样: <a>(.)*?</a>

在线测试的结果如下:
共找到 2 处匹配:
<a>1212</a>
<a>2222</a>

贪 说的是正则在不约束的情况下会继续自动向右进行匹配,直到匹配结束,只要匹配的数据与正则的最后一个值匹配就算是匹配到了。

不贪 说的是只要匹配到就结束,不继续向右进行匹配了。

问号 ? 就解决了贪婪的问题,使得问号前面的字符匹配到之后就结束,但是并不是把 ?放在哪里都可以解决贪婪的,在正则里,有一些属于贪婪模式量词,比如以下这些:

{m,n}

{m,}

?

*

+

断言与零宽
在java中我们知道 断言 可以用来声明一个应该为 true 的事实,只有当断言为真时才会继续进行后续的操作。

在正则中也有 断言 的概念,但是在正则中除了 断言 还有 零宽 的概念。

断言:

通俗点将断言就是 “我断定某某情况是真的” ,而正则中的断言,就是说正则可以断定在 指定的内容 的 前面 或 后面 会出现满足指定规则的内容。比如 "aa1bb2cc3",正则可以用断言找出 bb2 前面有 aa1,也可以找出 bb2 后面有 cc3。

零宽:

零宽就是没有宽度,在正则中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身的。

断言一共有四种情况:

<span class="read-cnt">阅读数:1024</span>

\d+(?=</span>)
分组
正则表达式中用小括号 () 来做分组,也就是括号中的内容作为一个整体。

因此当我们要匹配分组 he 的时候,可以用下面这个表达式 :

(he)

he is a great man,she is a greate woman

(he)

共找到 2 处匹配:
he
he

我们看到正则表达式用小括号来做分组,那么问题来了:

如果要匹配的字符串中本身就包含小括号,那应该怎么办?

针对这种情况,正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简单,就是在要转义的字符前面加个斜杠(\)即可。

因此当我们要匹配分组 (he) 的时候,可以用下面这个表达式 :
(he) is a great man,(she) is a greate woman
(\(he\))
共找到 1 处匹配:
(he)


aa122bb233cc344
(\w)(\w)\2

共找到 3 处匹配:
122
233
344








From:
https://mp.weixin.qq.com/s/9zdQYSkZdcbWioDECwz56g
背景:Win10是在T60P上安装的,内存4G有点紧张,于是想禁用一些没有用的进程,譬如:小娜Cortana。
————————
出现不让重命名的,以及结束进程又起来了的情况,于是,用下在这个方法也就解决了问题,如下:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
成功: 已终止进程 "SearchUI.exe",其 PID 为 5964。

后又起来了。

C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy>del SearchUI.exe
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy\SearchUI.exe
拒绝访问。




最后, 这个进程也就没有了,如下确认没有运行了:
C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy> taskkill /f /im SearchUI.exe
错误: 没有找到进程 "SearchUI.exe"。


sudo useradd -m -s /bin/bash xiangdong -g irdcops  #添加用户



DownLoad:
https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
出现缺少库ModuleNotFoundError: No module named '_ctypes',再次加上,关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法:


而Raspberry Pi读取的是libffi-dev ,如下:

来自:https://blog.csdn.net/wang725/article/details/79905612

编译Python3.7.1教程:https://blog.csdn.net/RambleMY/article/details/82109788

安装numpy:
如果成功安装好了pip,安装numpy及其他任何Python包都非常方便了
  运行pip install numpy
  pip会先自动下载与我们Python版本对应的numpy-xxx.whl文件,然后安装

矩阵计算:



画曲线:
sudo su -
pip3 install matplotlib  #失败
sudo apt-get install python3-matplotlib # 安装成功,但是写代码时引用失败,如下:
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'matplotlib'  ,成功如下:

以上代码在树莓派的界面上运行成功输出一个新窗口的Sina曲线。


二)VNCServer的配置尤其是复制和开机启动相关:
cat /home/irdcops/shell/vncsvr/startvncsvr.sh
killall Xvnc >/dev/null 2>&1  
vncserver -kill :1  
rm -rf /tmp/.X*-lock  
rm -rf /tmp/.X11-unix/X*  
rm -rf /root/.vnc/*.log  
rm -rf /root/.vnc/*.pid  
vncserver :1 -geometry 1024x768  

这个是手动,二是那个能从Windows里复制进去,还得要开机启动,如下配置:



cat /etc/init.d/vncserver



chmod 755 /etc/init.d/vncserver
sudo update-rc.d vncserver defaults

继续解决复制问题,如下步骤:
找不到:vncconfig,在红帽里找了一下,发现在:
rpm -qf /usr/bin/vncconfig
tigervnc-server-minimal-1.8.0-5.el7.x86_64 ,于是推测在Raspberry Pi里也是这样,指示了下:
apt-get install  tigervnc-standalone-server
下列【新】软件包将被安装:
  libgnutls30 libhogweed4 libnettle6 libxfont2 tigervnc-common tigervnc-standalone-server
apt-get install  tigervnc-standalone-server   #之前安装了一个:  sudo apt-get install tightvncserver
root@raspberrypi:~# vncconfig
vncconfig: unable to open display ""

stat /usr/bin/vncconfig
最近改动:2018-12-16 19:23:52.760773550 +0800

据博文,在文件/root/.vnc/xstartup,加一行 vncconfig -iconic &  ,有的说是加: vncconfig -nowin&



三)TensorFlow:https://www.raspberrypi.org/magpi/tensorflow-ai-raspberry-pi/
https://yq.aliyun.com/articles/623213
问:
屏幕休眠后不能继续下载(Wi-Fi会断)?

答:
你可以使用第三方下载工具(例如:迅雷)会有类似于“下载时防止电脑进入睡眠”的功能。
关着屏幕播放音乐,需要你连接电源适配器,进入“系统偏好设置>节能器”,勾选“当显示器关闭时防止电脑自动进入睡眠”,同时把“此时间段关闭显示器”滑杆拖至“永不”。 这时候,你可以通过亮度调节,把屏幕关闭。
但是你不可以合上屏幕来播放音乐,如果需要此功能,你依然需要使用第三方插件来实现。

来自:https://discussionschinese.apple.com/thread/30207
Docker 容器镜像是一个轻量、独立、含有运行某个应用所需全部软件的可执行包,那么一个 Docker 镜像里面会包含什么东西?这个名为 Dive 的工具正是用来分析和浏览 Docker 镜像每层的内容。

通过分析 Docker 镜像,我们可以发现在各个层之间可能重复的文件,并通过移除它们来减小 Docker 镜像的大小。

Dive 是一个用 Go 语言编写的自由开源工具。Dive 工具不仅仅是一个 Docker 镜像分析工具,它还可以帮助使用者用于构建镜像。

RHEL/Centos

curl -OL https://github.com/wagoodman/dive/releases/download/v0.3.0/dive_0.3.0_linux_amd64.rpm
rpm -i dive_0.3.0_linux_amd64.rpm


来自:https://javascript.ctolib.com/wagoodman-dive.html
Centos下_MysqL5.7(Server version: 5.7.12-log)在使用mysqldump命令备份数据库报错:mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysql -u zabbix -p'q1w2***4' -P 3306 -h 127.0.0.1 -e "show status like 'Threads_cached';"|grep -v Value |awk '{print $2}'
mysql: [Warning] Using a password on the command line interface can be insecure.
3

===========================================================================
一)Server version: 5.7.12-log Source distribution下用 2>/dev/null并不行:
mysql -u zabbix -*****' -P 3306 -h 127.0.0.1 -e "show s
tatus like 'Threads_cached';"|grep -v Value |awk '{print $2}' 2>/dev/null
mysql: [Warning] Using a password on the command line interface can be insecure.
二)export MYSQL_PWD=666666 也不行。
阅读全文
背景:装个电脑Wifi的驱动,发现提示TP-LINK无线网卡老提示找不到imagstr.dll.dll,客户端无法打开。
解决办法:Thunder Network ,迅雷看看播放器,都容易引发问题,用Everything工具批量搜索: thunder找到所有目录并结合Wholockme强制删干净。重启电脑。
官方说装D盘,我直接重装安装到: E:/Program Files/下得了,就装它得了。
工具/原料
电脑
方法/步骤
这个imagstr.dll.dll文件网上不太好找。

解决方法其实很简单,卸载驱动后重新安装,不要选择Autorun

据说找不到这个dll文件是迅雷软件作怪。

建议选择TL-WN725N文件夹里面的Setup手动安装到非迅雷盘

TP-LINK无线网卡提示找不到imagstr.dll.dll?

最后的界面是这样的。选择TP-LINK客户端应用程序即可


来自:https://jingyan.baidu.com/article/73c3ce281d10e2e50343d988.html
https://service.tp-link.com.cn/detail_article_3225.html
注册Dll:
先从网站下载下来imagstr.dll.文件之后,先将其解压(一般都是rar压缩包), 然后根据您系统的情况选择X86/X64,X86为32位电脑,X64为64位电脑。默认都是支持32位系统的。
3)Windows XP/WIN7系统,将此文件复制到c:\Windows\System32目录。
4)如果您的系统是64位的请将文件复制到C:\Windows\SysWOW64目录
2.然后打开"开始-运行-输入regsvr32 imagstr.dll.",回车即可解决错误提示
https://zhidao.baidu.com/question/1707740617078138540.html?qbl=relate_question_3&word=imagstr.dll.dll
CentOS7安装最新Docker:

来自:https://www.cnblogs.com/hongshaozi/p/12744483.html
对于二的实践发现,刚开始目录里没有东西:/var/lib/docker/devicemapper/devicemapper ,但:systemctl  start docker后就有了:
/var/lib/docker/devicemapper/devicemapper
data  metadata
成功迁移到/data盘:/var/lib/docker/devicemapper/devicemapper -> /data/docker/devicemapper/devicemapper  #docker-ce-20.10.14版本

刚开始docker目录也没有,也得等systemctl  start docker后才会有,进而写入内容:/etc/docker/daemon.json

二、CentOS下的Docker DeviceMapper占用空间太大解决方案


/var/lib/docker/devicemapper/devicemapper/data
scp /var/lib/docker/devicemapper/devicemapper/data root@10.71.165.136:/var/lib/docker/devicemapper/devicemapper/data  #这个方法不行,看有2G,一拷贝有20G
步骤1)挂载盘:
rm -rf /var/lib/docker/
mkdir -p /var/lib/docker/devicemapper/
mkdir -p  /data/docker/devicemapper/devicemapper    
ln -sf /data/docker/devicemapper/devicemapper /var/lib/docker/devicemapper/devicemapper
ll /var/lib/docker/devicemapper/devicemapper
lrwxrwxrwx 1 root root 38 Dec  5 22:35 /var/lib/docker/devicemapper/devicemapper -> /data/docker/devicemapper/devicemapper

步骤2)卸载重装Docker:
yum remove docker-ce
yum install docker-ce
systemctl start docker
docker images
cd /lib/systemd/system
mv docker.service docker.service.init0
mv docker.service.proxy.ok docker.service
systemctl daemon-reload
systemctl restart docker


步骤3)检查是否给把原来的大的挂载磁盘给软链接进来了:

#du -sh /var/lib/docker/devicemapper/devicemapper/data
11M     /var/lib/docker/devicemapper/devicemapper/data

[root@docker_build_bj_sjs_10_71_159_11:~]
#ls -lart /var/lib/docker/devicemapper/devicemapper
lrwxrwxrwx 1 root root 38 Dec  5 22:35 /var/lib/docker/devicemapper/devicemapper -> /data/docker/devicemapper/devicemapper

附录:docker.service




5.1G    /var/lib/docker/devicemapper/devicemapper/data  #这个可能38G,太大,40G盘存不下来。

都有可能。得按方法二,来处:https://blog.csdn.net/CHENYUFENG1991/article/details/79839497

解决方案2:成功
停止docker!!!这一步很关键,否则下面的设置会失败。
编辑以下文件:
vim /lib/systemd/system/docker.service

原内容如下:
ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY\
          $REGISTRIES


然后修改为以下:
ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --storage-opt dm.loopdatasize=8G \
          --storage-opt dm.loopmetadatasize=4G \
          --storage-opt dm.basesize=8G \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY\
          $REGISTRIES


也就是多加以下3行:
          --storage-opt dm.loopdatasize=8G \
          --storage-opt dm.loopmetadatasize=4G \
          --storage-opt dm.basesize=8G \

设置devicemapper的data为8G,metadata为4G,镜像的大小不能大于8G。

删除原有docker,并使用dd命令进行空间分配
rm -rf /var/lib/docker
mkdir -p /var/lib/docker/devicemapper/devicemapper/
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1M count=0 seek=8192
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=1M count=0 seek=4096

完成上述步骤后
systemctl daemon-reload
systemctl start docker
docker info

背景: 有时偶尔会用到从文本里转成Html在浏览器里看,这个Editplus直接Ctrl+b就能看,现在Mac上没有这个Editplus怎么办呢?看文章中一步一步用VSCode替代Editplus即可。
vscode怎么浏览器打开html预览?这里大家可以通过安装open in browser插件解决。
注意:这个得保存为Html后缀才行,否则,鼠标右键不会有Open in Default Browsers


来自:https://www.cnblogs.com/echolun/p/9527319.html
背景:今天突然发现刚买的Mac原装鼠标在有时候出现了MacBook上的鼠标指针没了,一会又好了。查了下原因。

主要是下面的原因造成的:
一、驱动兼容性不好或者系统不稳定。
1、安装驱动精灵,选择一键更新所有驱动,这样兼容性好一些。
2、更换鼠标USB接口,或者重新启动电脑。
二、如果是无线鼠标还可能是电力不足,导致连接不稳定。更换鼠标电池。

摘自:http://ask.zol.com.cn/x/1196882.html
macbook鼠标慢命令行设置:
defaults read -g com.apple.mouse.scaling
defaults write -g com.apple.mouse.scaling 10.0




MAC下截屏命令是Command+Shift+3,部分截屏命令是Command+Shift+4。
---------
按下Command+Shift+4并按下空格键。 交叉十字图标将变为小照相机图标。
你可以再次按下空格键转换为交叉十字图标。
移动光标到你希望进行截图的窗口上。
当照相机图标移过不同窗口上时,窗口将程高亮蓝色显示。 ...
点击所需窗口。 和其他截图方法一样,所选窗口的截图将默认保存在桌面上。


MAC下退出VIrtualBox全屏命令是Command+C,鼠标退出来的命令是command.




snip快捷键和钉钉的截图快捷键冲突,需要将钉钉的截图删除掉。
钉钉-》偏好设置-》快捷键里修改或者删掉。
我用的是微信的截图,不一定登录上,只要打开就能截图,微信-设置-快捷键如下:
Control+Command+a。AddTime:2023-05-14.

应用界面居中control+option+command+C


实践来自:https://mp.weixin.qq.com/s/TFRv2wfaNpje_5rrELBEgA

定义
==============================================================================================
502,Bad Gateway,网关错误,它往往表示网关从上游服务器中接收到的响应是无效的,主要是PHP执行时间大于PHP超时,于是给Nginx返回为空引起的。
502并不是指网关本身出了问题,而是
1)从上游接收响应出了问题,比如由于上游服务自身超时导致不能产生响应数据,
2)或者上游不按照协议约定来返回数据导致网关不能正常解析。


情况1:关掉PHP-FPM进程:
"123.115.119.90" "up.levoo.com" "-" "[30/Nov/2018:22:51:52 +0800]" "GET /hello.php HTTP/1.1" "502" "552" "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "0.000" "0.000"
2018/11/30 22:51:52 [crit] 29084#0: *124 connect() to unix:/dev/shm/php-fcgi.sock failed (2: No such file or directory) while connecting to upstream, client: 123.115.119.90, server: up.levoo.com, request: "GET /hello.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "up.levoo.com"

情况2:

php-fpm.conf配置:

request_terminate_timeout=5
nginx配置:
fastcgi_read_timeout 10;

php-fpm.conf设置的最大执行时间是5s,但是php脚本需要的执行时间大于7s,所以php-fpm进程执行5s时就回退出,此时php脚本没有正常执行完,返回给网关Nginx的数据为空,于是导致502。
502日志:
"123.115.119.90" "up.levoo.com" "-" "[30/Nov/2018:22:53:14 +0800]" "GET /hello.php HTTP/1.1" "502" "552" "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "5.287" "5.288"
2018/11/30 22:53:14 [error] 29084#0: *188 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.115.119.90, server: up.levoo.com, request: "GET /hello.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "up.levoo.com"

在实际的实践中发现当在EasySwoole里传大于设置的图片也会出现 Nginx的代理机上出现104: Connection reset by peer的情况。

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

504:nginx则以为上游php-fpm没有按照设置时间超过Nginx的等待时间,返回响应数据就会返回504。
504,Gateway Timeout,网关超时。

它表示网关没有从上游及时获取响应数据。注意它和502在超时场景下的区别,502是指上游php-fpm因为超过自身允许的执行时间而不能正常生成响应数据,而504是指在php-fpm还未执行完成的某一时刻,由于超过了nginx自身的超时时间,nginx则以为上游php-fpm没有按照设置时间返回响应数据就会返回504, 此时对于php-fpm而言还会继续执行下去,直到执行完成。

<?php

sleep(7);

echo 'hello world';

error_log("hello", 3, "/tmp/hello.log");

?>

vi php-fpm.d/www.conf
request_terminate_timeout = 30s

vi nginx.conf
fastcgi_read_timeout         5s;


504 Gateway Time-out
nginx

"123.115.119.90" "up.levoo.com" "-" "[30/Nov/2018:23:52:04 +0800]" "GET /hello.php HTTP/1.1" "504" "562" "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "5.005" "5.005"
2018/11/30 23:52:0


==============================================================================================
499, Client Closed Request, 客户端主动断开连接。
是指一次http请求在客户端指定的时间内没有返回响应,此时,客户端会主动断开连接,此时表象为客户端无响应返回,而nginx的日志中会status code 为499。

此状态码在浏览器请求时几乎不可见,因为浏览器默认的超时时间会很长。多见于服务之间的调用,在业务架构中常常会分层设计,拆分为不同的子系统或者微服务,这样系统之间就会常常通过http方式来请求,并且会设置每次请求的超时时间,当请求在请求时间内所调用的上游服务无返回,则会主动关闭连接,上游服务日志中会记录一条499。

php代码

<?php

sleep(7);

echo 'hello world';

error_log("hello", 3, "/tmp/hello.log");

?>
php-fpm.conf配置:

request_terminate_timeout=30
nginx配置:

fastcgi_read_timeout 5;
我们在linux终端使用curl命令来请求,-m 表示超时时间,单位为秒

curl -i -m 3 http://127.0.0.1/hello.php
返回为:

curl: (28) Operation timed out after 3004 milliseconds with 0 bytes received
nginx的access日志的code为499,如下:

"HEAD /hello.php HTTP/1.1" 499 0


#curl -I -m 3 http://up.levoo.com/hello.php
curl: (28) Operation timed out after 3022 milliseconds with 0 bytes received
Nginx日志:
"47.94.88.237" "up.levoo.com" "-" "[30/Nov/2018:23:55:38 +0800]" "GET /hello.php HTTP/1.1" "499" "0" "-" "curl/7.55.1" "2.888" "-"

==============================================================================================
500
500, Internal Server Error , 服务器内部错误,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

日常开发中500错误几乎都是由于php脚本语法出现错误导致php-fpm无法正常执行。

复现路径
php代码:

<?php
echo 'hello '
echo ' world';
?>
由于php代码语法错误,php-fpm执行失败,然后告诉nginx这一结果,nginx则返回500。
该网页无法正常运作 up.levoo.com 目前无法处理此请求。
HTTP ERROR 500

Nginx错误日志:
"123.115.119.90" "up.levoo.com" "-" "[30/Nov/2018:23:57:42 +0800]" "GET /hello.php HTTP/1.1" "500" "5" "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" "0.022" "0.022"

php错误日志:
hello.php on line 3
vim ~/.zshrc
# export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH=$HOME/.irdcops/shell/tools/location.jackxiang.com:$PATH
export PATH=$HOME/.irdcops/shell/tools/ippbcopy.jackxiang.com:$PATH

Mac终端被自己玩“坏”了,登陆默认是-bash-3.2$,一些命令无法使用,现在记录恢复初始化    [username(你的账户名)@主机名 ~] $   解决的办法。
工具/原料
Mac
终端
方法/步骤1
终端输入以下命令:

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin

之后输入

cd ~/

3、先输入

touch .bash_profile

之后输入

open .bash_profile

打开文件之后,在文件的最后一行添加

export PS1='[\u@\h \w]\$'



之后按住保存该文件关闭

输入下列命令,刷新终端,ok~

source .bash_profile

补充:关于更改主机名和共享名

主机名

sudo scutil --set HostName rainbird-desk

共享名

sudo scutil --set ComputerName newName


来自:https://jingyan.baidu.com/article/c74d6000c277e80f6a595d8c.html



二)MAC 设置环境变量PATH 和 查看PATH
理论篇
Mac系统的环境变量,加载顺序为:
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc

#中间用冒号隔开
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

实践主要是:ckubectlcmd    ckubectlishow 两个快捷命令,如下:
$cat /Users/jackXiang/.bashrc |grep kube


$cat /Users/jackXiang/.bash_profile

参考自:https://www.jianshu.com/p/acb1f062a925
法一)直接PKG安装:
#pkg install git
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB 118.7kB/s    00:57    
Processing entries: 100%
FreeBSD repository update completed. 32579 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 15 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        git: 2.19.1
        p5-CGI: 4.40
        p5-HTML-Parser: 3.72
        p5-HTML-Tagset: 3.20_1
        perl5.24: 5.24.4
        p5-IO-Socket-SSL: 2.059

法二)Ports源码安装:

cd /usr/ports/devel/git
sudo make install clean BATCH="yes"

https://www.digitalocean.com/community/tutorials/how-to-install-git-on-freebsd-11-0






sudo pkg update
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD has a wrong packagesite, need to re-create database

Fetching meta.conf: 100%    163 B   0.2kB/s    00:01    
Fetching packagesite.pkg: 100%    7 MiB  73.4kB/s    01:41    
Processing entries:   0%
Newer FreeBSD version for package zziplib:
To ignore this error set IGNORE_OSVERSION=yes
- package: 1302001
- running kernel: 1300139
Ignore the mismatch and continue? [y/N]: pkg: repository FreeBSD contains packages for wrong OS version: FreeBSD:13:amd64
Processing entries: 100%
Unable to update repository FreeBSD
Error updating repositories!
========================================================

根据错误信息,您遇到了一个由于系统版本不匹配而导致的问题。您的系统内核版本是`1300139`,而存储库中的软件包适用于版本`1302001`。以下是解决此问题的步骤:

1. **确认系统版本:**
   使用以下命令确认您的系统版本:

    ```bash
    uname -a
    ```

   如果输出的版本与错误中提到的不匹配,您可能需要更新系统。

2. **更新系统:**
   如果系统版本不匹配,尝试更新系统以匹配存储库中的软件包版本。使用以下命令:

    ```bash
    freebsd-update fetch install
    ```

   这将尝试将您的系统更新到最新的稳定版本。

3. **更新软件包数据库:**
   更新软件包数据库,以确保它与新的系统版本兼容:

    ```bash
    sudo pkg update
    ```

   如果这仍然失败,您可能需要重新创建软件包数据库。

4. **重新创建软件包数据库:**
   执行以下命令来重新创建软件包数据库:

    ```bash
    sudo pkg bootstrap -f
    ```

   然后再次运行更新命令:

    ```bash
    sudo pkg update
    ```

   现在,您应该能够更新软件包并安装Git。

请注意,由于系统版本不匹配可能会导致其他依赖关系问题,如果遇到其他错误,请根据错误消息逐个解决。如果有其他问题或需要更多帮助,请告诉我。
问题: sh: zip: not found

Port安装:
cd /usr/ports/archivers/zip/ && make install clean

安装后位置: /usr/local/bin/zip
分页: 15/272 第一页 上页 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 下页 最后页 [ 显示模式: 摘要 | 列表 ]