inotifywait的脚本,系统上临时监控够用了

#!/bin/bash
inotifywait -mrq --timefmt '%y%m%d%H%M' --format '%T %w%f %e' --event delete,modify,create,attrib /data/web | while read date file event
    do
        case  $event  in
            MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
            echo  $event' - '$file' - '$date >> /var/log/web_watch.log
            ;;

            MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
            echo  $event'-'$file'-'$date >> /var/log/web_watch.log
            ;;
        esac
    done

好东西,inotify

php的inotify扩展提供了监控文件或目录的功能,可以用来实现,服务的热更新,或安全监控。

inotify一共提供了5个函数:

1、inotify_init() 用于初始化一个实例,返回的是一个 stream 资源对象,可以被标准stream函数使用,如stream_set_blocking()。

2、inotify_add_watch() 将一个文件或目录添加到监控列表中,如果存在,则替换。

3、inotify_read() 从 inotify 实例中读取事件,如果没有返回false,如果有,返回一个 inotify 事件数组。

4、inotify_queue_len() 返回队列中事件的个数,可以理解为系统把 inotify_add_watch 关注的事件一个个加入队列,通过 inotify_read() 读取事件。

5、inotify_rm_watch() 取消监控。

/proc/sys/fs/inotify/max_queued_events默认值: 16384
该文件中的值为调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值得事件被丢弃,但会触发IN_Q_OVERFLOW事件
/proc/sys/fs/inotify/max_user_instances默认值: 128
指定了每一个real user ID可创建的inotify instatnces的数量
/proc/sys/fs/inotify/max_user_watches默认值: 8192
指定了每个inotify instance相关联的watches的上限,也就是每一个inotify实例可监控的最大目录数。如果监控的文件数目巨大,需要根据实际情况适当增加此值得大小。注意: max_queued_events 是 Inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大!如果你在日志中看到Event Queue Overflow,说明max_queued_events太小需要调整参数后再次使用

css控制文字显示2行

在编写页面的时候,经常遇到一些地方的文字显示1行,多余的文字隐藏,这样显示1行的很好控制:

css代码如下:

white-space: nowrap;  

overflow: hidden;  

text-overflow: ellipsis;  

3行代码搞定,这个很常见。但是要是2行文字显示多余隐藏呢,我之前在网上搜到的很多说什么用js去控制,用php控制。。。等等诸如此类的复杂方法,为什么不能同样用css去控制呢?后来找到答案了,用css同样可以去控制2行文字显示多余隐藏。

css代码如下:

text-overflow: -o-ellipsis-lastline;  overflow: hidden;  text-overflow: ellipsis;  display: -webkit-box;  -webkit-line-clamp: 2;  -webkit-box-orient: vertical;  

更方便的是改变webkit-line-clamp的值还可以实现3、4、5等等多行文字显示多余隐藏的效果~

nagios-4.4.6安装,centos7

手册地址:https://support.nagios.com/kb/article/nagios-core-installing-nagios-core-from-source-96.html

可以完全参考上面的安装方法

我的apache是自己手工安装的,/home/system/apache,在执行make install-webconf的时候,提示失败,看提示是复制到/etc/httpd/conf.d目录了,我没有这个目录,于是手工建立,成功,然后把conf.d/nagios.conf复制到/home/system/apache/conf/extra/nagios.conf

按照提示,安装完毕后,apache启动,nagios启动,但是cgi文件提示下载,打开httpd.conf中的LoadModule cgid_module modules/mod_cgid.so模块,重启就好了

mark,2021.11.26日凌晨

grep的贪婪和非贪婪匹配

grep -oE ‘/Public/v2/.*.png’ xxx.html

grep -oE ‘/Public/v2/.*\?.png’ xxx.html

无效,只能是贪婪模式

grep -oP ‘/Public/v2/.*?.png’ xxx.html

可以获取到所要的结果,不是贪婪模式,后面的?生效.

你正在寻找一种非贪婪(或懒惰)的比赛。 要在正则表达式中获得非贪婪匹配,您需要在量词后使用修饰符grep。 例如,您可以将grep -P更改为.*?

默认情况下,grep不支持非贪婪修饰符,但您可以使用grep -P来使用Perl语法。

php安装inotify扩展

inotify是pecl的扩展之一.

需要pecl扩展库,则需要安装pear
php编译pear,编译参数加–with-pear就可以了

安装完之后在/home/system/php/bin目录会有pecl和pear命令

执行/home/system/php/bin/pecl install inotify
就会安装,安装完后提示你再php.ini文件中加入extension=inotify.so

加入后就完成了

一个update语句,多表条件

update yunqikds_companys left join yun_industry on yun_companys.industry = yun_industry.main set yun_companys.industry = yun_industry.id where yun_companys.industry = yun_industry.main;

where条件必须有

left join TABLE on 条件

再来几个

update yun_companys left join sheet1 on yun_companys.unitcode = sheet1.统一社会信用代码 set yun_companys.unittype=sheet1.企业性质 where yun_companys.unitcode=sheet1.统一社会信用代码;

update yun_companys left join sheet1 on yun_companys.unitcode = sheet1.统一社会信用代码 set yun_companys.scope=sheet1.经营范围 where yun_companys.unitcode=sheet1.统一社会信用代码;

update yun_companys left join sheet1 on yun_companys.unitcode = sheet1.统一社会信用代码 set yun_companys.address=sheet1.地址 where yun_companys.unitcode=sheet1.统一社会信用代码;

windows10的子系统ubuntu的vim无响应解决办法

问题挺严重的,vim运行就无响应,ctrl+ctrl+s,ctrl+q,怎么着都不行,尝试打印vim日志,看起来也没什么进展,升级到ubuntu16,升级到ubuntu20,也不行.按照网上说的卸载vim-common,再安装apt-get install vim,也不行.

 

后来猜测是windows10的更新补丁导致,查看补丁日志,11.11号有三个更新补丁,于是卸载一个补丁,正常了,如下图

补丁名称是kb5007206

 

2022.02.10更新:
https://superuser.com/questions/1684867/wsl-issue-vi-vim-and-nano-are-unusable-empty-terminal-screen-same-isue-with
找到个链接:如下图,export TERM=xterm-color

获取状态函数

获取状态
    public function getStatus(){
      $sql = 'select setup from field as f,(select id as tid from module where name=\'coupons\') as t where t.tid=f.module_id and f.field=\'status\'';
      $res = Db::query($sql);

      $arr = unserialize($res[0]['setup']);

      $strStatus = $arr['options'];

      // var_dump(explode("\s",$strStatus));die();   //换行用PHP_EOL不行
      $arrStatus = var_dump(preg_split('/[\s]+/',$strStatus));
      
      return $arrStatus;
   }