运行了几个python后台守护进程,需要重启的时候不能简单 killall python 很容易会误杀其他服务
所以备忘以下的脚本

已验证有效

#!/bin/sh

function PidFind()  
{
    PIDCOUNT=`ps -ef | grep $1 | grep -v "grep" | grep -v $0 | awk '{print $2}' | wc -l`;  

    if [ ${PIDCOUNT} -gt 1 ] ; then  
        echo "There are too many process contains name[$1]"  
    elif [ ${PIDCOUNT} -le 0 ] ; then  
        echo "No such process[$1]!"  
    else  
        PID=`ps -ef | grep $1 | grep -v "grep" | grep -v ".sh" | awk '{print $2}'` ;  
        echo "Find the PID of this progress!--- process:$1 PID=[${PID}] ";  

        echo "Kill the process $1 ...";          
        kill -9  ${PID};  
        echo "kill -9 ${PID} $1 done!";  
    fi  
}
#查找并kill掉 带有 newdoc.daemon 名称的进程
PidFind newdoc.daemon

#restart daemon
/path/to/startscript/chkdaemon.sh

当搜索结果不唯一时,脚本也会拒绝执行杀进程

参考文:https://jingyan.baidu.com/article/b7001fe1a5dbc40e7382dd75.html

备忘,当对一个有唯一索引字段的表做插入操作INSERT INTO 时做遇到冲突则更新的逻辑ON DUPLICATE KEY UPDATE
想知道此时是否仍然能够获取到 操作的行的id值db.lastrowid

sql = "INSERT INTO `mTable`(`id`, `tfsn`)  " \
          "VALUES(%s, %s) " \
          "ON DUPLICATE KEY UPDATE `tfsn`=VALUES(`tfsn`);"

vals = (id, tfsn)

try:
    db.execute(sql, vals)

    new_cid = db.lastrowid
    print("tfid:", tfid) #如果触发了update 可以获得id值?

结论是,能,也可能不。
当触发update 有内容变更时,可以获得 id值;
当update的内容新旧完全一致前后没有变化的话,mysql会认为没有任何行被更新。所以返回的 id 会是0

对于没有运行错误的脚本却发生了高负载、无响应、堵塞或死循环等问题。从进程只能看到异常 php-fpm 存在。需要具体了解详情可以做一下操作

找到 php-fpm.conf 所在路径,编辑之

find / -name php-fpm.conf

查找结果: /usr/local/php/etc/php-fpm.conf

vi /usr/local/php/etc/php-fpm.conf

查看(无则添加)slowlog 值 ,将 request_slowlog_timeout 设为 非0 (0 代表不记录慢日志)
举例如下

...
request_slowlog_timeout = 5s
slowlog = var/log/slow.log

保存,重启 php-fpm
跟踪慢日志

lnmp php-fpm restart
tail -f /usr/local/php/var/log/slow.log

日志会定位到发生运行缓慢的第几行什么命令

是的你没看错,是从https切换回http。这个开倒车的奇怪需求是由于

腾讯云直播API生成 HLS拉流地址默认是 http (尽管文档声称支持 https 但依然会触发证书与域名的不匹配,显示更难看的红色警告标签,而且同样会导致资源加载失败)
QQ截图20200520092043.jpg

控制台报警:

已拦截跨源请求:同源策略禁止读取位于 https://XXXXXX.com/live/XXXXXX.m3u8 的远程资源。(原因:CORS 请求未能成功)。
无法加载视频文件,请检查网络,以及视频文件是否允许跨域请求访问,m3u8文件是否存在

而在https协议下调用http资源这种做法,主流浏览器是被拦截禁止的,可参考
Firefox浏览器的安全说明 与截图:

QQ截图20200520085519.jpg

  • 但是!目前在移动端(微信)下暂时还可以偷鸡这样搞,直播视频依然可以正常加载。

因此我需要:

判断当前用户是PC端浏览器访问且访问的是HTTPS时跳转到HTTP,回避所有的问题!

以下是简单实现方法:




- 阅读剩余部分 -

需要加一条白名单规则让远程机器连mysql端口 3306

iptables -A INPUT -p tcp --dport 3306 -s 45.83.151.250 -j ACCEPT

添加完后检查,并保存生效

iptables -L
iptables-save

规则内原本已经有 DROP 3306 端口的规则,所以新增的这条无效
直接进去改配置文件(实际情况路径和文件名可能略有不同)

vi /etc/iptables/rules.v4

把新增的规则调整在 drop规则之前,保存, 并使之生效

iptables-restore < /etc/iptables/rules.v4