0%

php-fpm和nginx的 reload、restart的区别

  1. reload

    不会停止服务,用于重新加载配置;并且会检查配置文件的语法

  2.  restart 

    会停止服务,重新启动,脚本里写的是执行 stop() 和 start()

  3. php-fpm的脚本

    #! /bin/sh
    #
    # chkconfig: - 84 16
    # description:  PHP FastCGI Process Manager
    # processname: php-fpm
    # config: /opt/remi/php54/root/etc/php-fpm.conf
    # config: /opt/remi/php54/root/etc/sysconfig/php-fpm
    # pidfile: /opt/remi/php54/root/var/run/php-fpm/php-fpm.pid
    #
    ### BEGIN INIT INFO
    # Provides: php-fpm
    # Required-Start: $local_fs $remote_fs $network $named
    # Required-Stop: $local_fs $remote_fs $network
    # Short-Description: start and stop PHP FPM
    # Description: PHP FastCGI Process Manager
    ### END INIT INFO
    
    

    Standard LSB functions

    #. /lib/lsb/init-functions

    Source function library.

    . /etc/init.d/functions

    Check that networking is up.

    . /etc/sysconfig/network

    Additional environment file

    if [ -f /opt/remi/php54/root/etc/sysconfig/php-fpm ]; then
    . /opt/remi/php54/root/etc/sysconfig/php-fpm
    fi

    if [ “$NETWORKING” = “no” ]
    then
    exit 0
    fi

    RETVAL=0
    prog=”php-fpm”
    pidfile=${PIDFILE-/opt/remi/php54/root/var/run/php-fpm/php-fpm.pid}
    lockfile=${LOCKFILE-/var/lock/subsys/php54-php-fpm}

    start () {
    echo -n $”Starting $prog: “
    dir=$(dirname ${pidfile})
    [ -d $dir ] || mkdir $dir
    daemon –pidfile ${pidfile} /opt/remi/php54/root/usr/sbin/php-fpm –daemonize
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch ${lockfile}
    }
    stop () {
    echo -n $”Stopping $prog: “
    killproc -p ${pidfile} php-fpm
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ] ; then
    rm -f ${lockfile} ${pidfile}
    fi
    }

    restart () {
    stop
    start
    }

    reload () {
    echo -n $”Reloading $prog: “
    if ! /opt/remi/php54/root/usr/sbin/php-fpm –test ; then
    RETVAL=6
    echo $”not reloading due to configuration syntax error”
    failure $”not reloading $prog due to configuration syntax error”
    else
    killproc -p ${pidfile} php-fpm -USR2
    RETVAL=$?
    fi
    echo
    }

    See how we were called.

    case “$1” in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status -p ${pidfile} php-fpm
    RETVAL=$?
    ;;
    restart)
    restart
    ;;
    reload|force-reload)
    reload
    ;;
    configtest)
    /opt/remi/php54/root/usr/sbin/php-fpm –test
    RETVAL=$?
    ;;
    condrestart|try-restart)
    [ -f ${lockfile} ] && restart || :
    ;;
    *)
    echo $”Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}”
    RETVAL=2
    ;;
    esac

    exit $RETVAL

        </pre>
        <p>
        reload 是这个
        <pre>    killproc -p ${pidfile} php-fpm -USR2</pre>
        stop 是这个
        <pre>    killproc -p ${pidfile} php-fpm </pre>
        -USR2是操作系统定义的信号,给开发者用于任意用途。其他信号还有 USER1,HUP (重载配置)
        参考 <a href="https://stackoverflow.com/questions/5350865/why-do-many-unix-programs-use-signals-like-usr1">Why do many Unix programs use signals like USR1?
    

  4. nginx的脚本
    参见 Nginx和PHP-FPM的启动/重启脚本

今天学的是左边倒车入库,要点,倒车车速要慢,调方向要流畅快速。

点位
  1. 出库对线穿过车窗后沿

  2. 出库后感应线穿过膝盖

  3. 倒车左边后视镜看车库直角的位置

  4. 看右后视镜靠里的直角出现

  5. 停车车库后面的线和前门左把手中间靠后平齐

流程
  1. 倒车停止的位置,前门把手中间偏后的位置和左边后视镜看到的车库底端的线重叠。

  2. 出库,车启动稳定向前,扭头平视左边的虚线,虚线和车窗末端前一点平齐的时候,快速向左打一圈加90度方向盘,驶出车库,看左边后视镜看看出库时轮子离车库竖线的距离。

  3. 车开到前方感应线穿过膝盖后停止,倒车。

  4. 倒车车速要慢,往前往左探,稳住方向盘,看到后轮和车库竖线的延长线交叉时判断宽度,过宽要向左打死方向盘,标准为比两条竖线的宽度略窄。

  5. 左边没有压线后看右边,看到右边车库底部的直角时快速回正方向盘

  6. 再看左边,车身里面和外面与车库竖线的宽度,看情况调整,标准是里面比外面略窄。

其他
  1. 还需要加强的,方向盘打的不够流畅,有时会乱,两只手握住同一地方了。没能做到边走车边做动作。

  2. 教练的话,打方向盘的时候不要去想不要去看,就像追女孩子一样,你不想就能掌控。

  3. 方向盘,手搭在上面就好,不要握住,会养成坏习惯,后面还有要操作转向灯等的。

  4. 下雨天也要考试,最怕是起雾,要开空调除雾。

  5. 学车不要怕犯错,要多试错,知道是怎么回事,不然考试有什么状况不会应变。

简单记为四三二


上车四

    1、座椅高度,座位左边往上往下调,头不要靠车顶,我调到最下面

    座椅水平前后,膝盖弯曲,脚掌多肉的部位全部踏在刹车上,以后脚跟为支点,踩刹车脚后

    跟不能离地。拉起前后移动,放开,再前后移卡住,再放脚度量

    2、座椅靠背前后,调时背不要靠着,是旋转来调整的。手自然前伸,手掌多肉的地方和

    方向盘顶端平齐即可。调完检查脚刹车是否合适

    3、后视镜,后门把手在镜子中上,只看到一点点。先拨到左,然后上下左右推。

    4、系好安全带

手三件

    1、方向盘

    手自然屈肘握住方向盘,

    换一次手是一圈,交替换时要协调,一定要有一只手握住方向盘

    从左到右一共三圈,回到中间是1.5圈。

    调方向只有90度的

    掉头打死方向盘。

    不要想,不要看手。


    2、手刹

    提起来咔咔两声

    按下去,提按同时,不提按不进去。

    3、档位

    P,R,N,D,S

    不要太用力,拨不动的时候按按钮。

脚两件

    1、刹车

    不能穿太厚的鞋子,感受不到刹车的反向力

    慢慢放开就定住,缓缓调,不要过猛

前进

    前方能看多远看,不要看车头,感觉方向是否偏左偏右

后退

    倒车,左右看后视镜,速度不要快,那边宽方向盘就往哪边摆

不管前进还是后退,速度控制好,不能停。


记定点而不是步骤,到哪个点做什么动作

curl请求的内容不走fiddler代理,只有hosts文件的域名映射才起作用

线上代码出错了,原因是用错了 isset() ,来判断数组的key是否存在,

$arr['real_boss'] = NULL;
$res = isset($arr['real_boss']);
var_dump($res);

结果是 bool(false)

那怎么判断数组key是否存在呢?

key_exists($arr, 'real_boss');
array_key_exists($arr, 'real_boss');
这两个方法功能是一样的,只是PHP版本的区别

缓存,什么是缓存呢?大家想必都非常清楚,缓存就是数据交换的缓冲区,
就程序而言,

Yii 缓存

11.1

Yii::$app 应用主体 Yii::$app->cache 缓存组件 Class yii\caching\FileCache较大块的数据 cachePath 默认runtime/cache 把文件删除,又要5s 运行后又生成 根据存储介质的不同,可分为
  1. FileCache 文件
  2. ApcCache PHP APC 扩展
  3. DbCache
  4. DummyCache 仅作为一个缓存占位符
  5. MemCache 使用PHP memcachememcached 扩展
  6. yii\redis\Cache 基于Redis键值对存储
  7. WinCache 使用PHP WinCache 扩展
  8. XCache 使用PHP XCache 扩展
  9. ZendDataCache ZendDataCache扩展

存储介质不同

方法
get,set
缓存API
get 返回false
set key,value

  • add() ,只会在键名不存在的时候才会放到缓存中
  • multiGet()
  • multiSet()
  • multiAdd()
  • exists()
  • delete()
  • flush() 删除所有的缓存数据

组件的可替代性,直接换配置文件的组件
因为使用了同样的API

缓存键
缓存键前缀

keyPrefix

11.2

优化了性能
增加一篇文章,文章条数应该加1,
缓存空间已经满的极端情况,
不合理的,有什么方法干预缓存呢?
缓存过期
优化效果和实时性的矛盾
Yii::$app->cache->set('postCount', $data, 60);

缓存依赖与缓存过期可以一起使用
文章数据发生了变化,刷新缓存
对象,条件
set时,会记下sql的执行结果

  • DbDependency如果指定SQL语句的查询结果发生了变化,则依赖改变。
  • FileDependency如果文件的最后修改时间发生变化,则依赖改变
  • ChainedDependency如果依赖链上任何一个依赖发生变化,则依赖改变
  • ExpressionDependency如果指定的PHP表达式执行结果发生变化,则依赖改变
  • TagDependency将一项缓存数据标记到一个组名,你可以通过调用对象的 invalidate() 一次性将相同组名的缓存全部置为失效状态
难道是更新成 yii\caching\TagDependency 了?
$dependency = new \yii\caching\DbDependency(
    [\'sql\'=>\'select count(id) from post\']
);
Yii::$app->cache->set(\'postCount\', $data, 600, $dependency);
选择合适的依赖条件, 解决实时性,准确反映缓存数据的变化, 计算依赖结果所消耗的资源远小于计算数据结果所消耗的资源 缓存过期,缓存依赖

11.3

片段缓存,页面缓存 标签云的片段
$dependency = new \yii\caching\DbDependency(
    [\'sql\'=>\'select count(id) from post\']
);
if( $this->beginCache(\'cache\', [
    \'duration\' => 600,
    \'dependency\' => $dependency,
]) )
{
    echo TagsCloudWidget::widget([\'tags\'=>$tags]);
    $this->endCache();
}
缓存依赖

缓存嵌套
片段缓存可以被嵌套使用,一个片段缓存可以被另一个嵌套
动态内容,一大段静态内容中有少许动态内容的情况
调用
\yii\base\View::renderDynamic(return 'Yii::$app->user->identity->name;');去插入动态内容

页面缓存
behaviors() 方法

\'pageCache\' => [
    \'class\' => \'yii\filters\PageCache\',
    \'only\' => [\'index\'],
    \'duration\' => 600,
    \'dependency\' => [
        \'class\' => \'yii\caching\DbDependency\',
        \'sql\' => \'select count(id) from post\',
    ],
];

点第二页的时候,还是第一页的内容

\'variations\' => [
    Yii::$app->request->get(\'page\'),
];

查询的时候

\'variations\' => [
    Yii::$app->request->get(\'page\'),
    Yii::$app->request->get(\'PostSearch\'),
];

缓存整个页面
也支持缓存过期和缓存依赖
可以在使用页面缓存的同时,使用片段缓存和动态内容
缓存变化
缓存的内容需要根据一些参数的变化而变化
如,Web应用支持多语言
['variations'=>[Yii::$app->language]];

11.4 HTTP 缓存

耗时生成的数据,页面内容缓存在服务器上 利用客户端缓存
behaviors()
\'httpCache\' => [
    \'class\' => \'yii\filters\HttpCache\',
    \'only\' => [\'detail\'],
    \'lastModified\' => function($action, $params)
    {
        $q = new \yii\db\Query();
        return $q->from(\'post\')->max(\'update_time\');
    },
    \'etagSeed\' => function($action, $params)
    {
        $post = $this->findModel(Yii::$app->request->get(\'id\'));
        return serialize([$post->title, $post->conent]);
    },
    \'CacheControlHeader\' => \'public,max-age=600\',
];

Load 3.07s
HTTP 头

  • \yii\filters\HttpCache::lastModified
  • \yii\filters\HttpCache::ctagSeed
  • \yii\filters\HttpCache::cacheControlHeader

HTTP 协议
头和主体
响应头 Last-Modified
使用时间戳标明页面自上次客户端缓存后是否被修改过
通过配置lastModified属性向客户端发送Last-Modified头。

ETag头
Hash 值
Cache-Control 头指定了页面的常规缓存策略。
可以通过配置 \yii\filters\HttpCache::cacheControlHeader 属性发送相应的头信息

缓存过期用得最多

  1. 问题,运行PHP时告警
    PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/libevent.so' - /usr/lib64/php/modules/libevent.so: undefined symbol: php_sockets_le_socket in Unknown on line 0
    PHP Warning:  Module 'redis' already loaded in Unknown on line 0
    
  2. 第一个跟libevent.so有关,网上查了一下,把/etc/php.d目录下的libevent.ini重命名为libevent.so即可
    # cd /etc/php.d
    # mv libevent.ini libevent.so
    
    其他报类似错误也可以这样试试 参考http://blog.csdn.net/luckymama/article/details/74668372
  3. 第二个redis重复加载了,查看 php.ini 文件,发现
    extension_dir = "/usr/lib64/php/modules"
    extension = "redis.so"
    
    原来 /usr/lib64/php/modules 目录下也有redis.so,PHP运行时统一加载该目录下的 .so 文件 所以把extension = "redis.so"注释掉,改为
    extension_dir = "/usr/lib64/php/modules"
    ; extension = "redis.so"
    

    参考http://www.jb51.net/article/62281.htm

  1. 安装crontab

    yum -y install vixie-cron

  2. 相关命令
    # crontab –l //查看crontab项
    # crontab –e //编辑
    
  3. 服务操作
    //重启服务
    # /etc/init.d/crond restart 
    //查看服务状态
    # /etc/init.d/crond status
    
    这和很多服务类似
  4. 日志
    # cat /var/log/cron
    
  5. 实例
    #每分钟一次
    * * * * * sudo /usr/share/nginx/html/blog/yii crontab/send
    #这个是每小时的01分执行,之前以为是每分钟,一直以为有问题
    1 * * * * sudo /usr/share/nginx/html/blog/yii crontab/send
    
  6. 添加crontab命令后,重启crontab
  7. 参考http://www.cnblogs.com/intval/p/5763929.html
除了 crontab -l 
定时任务另一个位置
/etc/crontab

  1. 直接把配置文件main-local.php放到git exclude里,但没有把main.php没有的配置拷贝过去, 导致数据库链接失败
  2. <li>
    直接删了两个引用local文件的语句,没有检查语法错误。原来的:
    <pre>
    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'),
        require(__DIR__ . '/../../common/config/main-local.php'),
        require(__DIR__ . '/../config/main.php'),
        require(__DIR__ . '/../config/main-local.php')
    );
    </pre>
    删了之后:
    <pre>
    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'),
        require(__DIR__ . '/../config/main.php'),
    );
    </pre>
    漏了一个逗号没删,有语法错误,和平时数组的一项没删是有区别的。
    
            $arr = [
                "a" => 1,
                "b" => 2, //末尾有个,号是可以的
            ];
    
  3. 出错时排错的方法,到nginx的日志查看错误: /var/log/nginx nginx错误日志目录可以从nginx的配置文件中看, 配置目录:/etc/nginx

常用的Linux命令,备查,欢迎在评论区与我分享!
# 上传文件
rz -bey
# 清理磁盘
du -h --max-depth=1
# 磁盘是否满了
df -hl
# 去掉环境变量
unset 
env 查看
# grep 含引号
grep 'retCode":"10002"' rlog.log
# 查看谁登录了
w
#查看指定行
cat crm/protected/modules/Tumall/controllers/SellerController.php | tail -n +494 | head -n 10
#测试网络
echo "" | telnet 192.168.3.97 11218
# 搜索排除注释
grep -E "^$|^#" -v grep.txt
#查看文件某些行
sed -n '349,360p' basic/components/webservice.php
sed -n 'a,bp' basic/components/webservice.php, 查看 a-b行,如果b 覆盖, >> 追加
#grep显示附件的内容,-A,-B,-C
cat include/connectDB.inc.php |grep -C 5 fileServer
grep -A 5 zoneTypes src/To8to/CommonBundle/config/CategoryConfig.inc.php
#查找目录下哪些文件包含某个字符串
 grep -r m.to8to.com conf/conf.d/
#curl命令POST请求
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
#查看Linux系统发行版本
cat /etc/issue
#查看Debian版本
more /etc/debian_version
#查找文件
find / -name curl_for_test.txt
find /usr/ -name php7
#修改~vimrc后怎样立刻生效
:source ~/.vimrc (你得确定你的vimrc的路径)
#cpu
root@nginx-php-fastcgi ~# cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores	: 1
root@nginx-php-fastcgi ~# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
1
root@nginx-php-fastcgi ~# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
      1  Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz
root@nginx-php-fastcgi ~# cat /proc/cpuinfo| grep "processor"| wc -l
1
root@nginx-php-fastcgi ~# 
#查找
grep access /etc/nginx/conf.d/shejiben.conf
#awk
#备份文件并验证
root@nginx-php-fastcgi ~/backup# cp my.conf my.conf`date +%F` 
root@nginx-php-fastcgi ~/backup# md5sum my.conf my.conf2018-05-28 
8cd2616e051a7b8aea043c437e9c2b49  my.conf
8cd2616e051a7b8aea043c437e9c2b49  my.conf2018-05-28
#建目录
root@nginx-php-fastcgi /tmp# mkdir -p /tmp/mini_program/{aa,bb}
#查看文件大小等信息
stat img/xcx/interface_img.jpg 
#查看用户
cat /etc/passwd | grep www-data
#远程文件传输
scp root@192.168.1.233:/root/mobileapi2.lua ./
#文件夹
scp -r root@192.168.1.233:/root/mobileapi2.lua ./
指定端口
scp -P 10086 root@192.168.1.154:/usr/local/java/abc.zip ./
#登录
ssh root@192.168.0.11
#合并两个文件夹的文件
rsync -av /source/ /destination/
#合并后删除源文件夹
rm -rf /source/
#开启自启动
vi /etc/rc.d/rc.local
加入自启动的服务,如: service nginx start
另一个命令:chkconfig 
#包相关的目录文件
dpkg -L
#查看开机启动程序
vim /etc/rc.local
#切换到root
sudo -i
#创建/usr/local/php/bin/php的软链接为php53
ln -s /usr/local/php/bin/php /usr/bin/php53
#cut截取
 git branch -a | grep "remotes/origin" | cut -nb 18-50 
#查看Java进程所在目录
[root@java154 ~]# pidof java | xargs pwdx
#crontab
直接改文件可以 vim /etc/crontab 
但crontab -e 就不生效

[root@localhost ~]# cat ~/.bash_history

[root@localhost ~]# ls -ld /var/www/html/

[root@localhost ~]# head -10 phpinfo.txt

[root@localhost ~]# cat test.txt | tr [a-z] [A-Z]

[root@localhost ~]# wc -l /etc/passwd

[root@localhost ~]# cut -d: -f1 /etc/passwd

[root@localhost ~]# diff --brief log.txt index.html

[root@localhost ~]# ls -l test.txt 
-rw-r--r--. 1 root root 10 Feb  1 03:57 test.txt
[root@localhost ~]# echo "I'm hacker" >> test.txt 
[root@localhost ~]# ls -l test.txt 
-rw-r--r--. 1 root root 21 Feb  1 04:07 test.txt
[root@localhost ~]# touch -d "2019-02-01 03:57" test.txt 
[root@localhost ~]# ls -l test.txt 
-rw-r--r--. 1 root root 21 Feb  1 03:57 test.txt

[root@localhost ~]# dd if=/dev/zero of=10M_file count=1 bs=10M

[root@localhost ~]# file /dev/zero

[root@localhost ~]# grep -v /sbin/nologin /etc/passwd #反选

#将标准输出和错误输出共同写入到文件中
0  17  *  *  * root php /var/www/html/advanced/yii task/log >/dev/null 2>&1


[root@localhost ~]# ls -l /etc/ | more
#查询绝对路径
[root@xhs ~]# whereis php
#查进程的线程数
ps -Lf 21371 | wc -l
#查不包含某字符串的文件
ls | grep Deal -v | wc -l
#历史命令不显示行号
history | cut -c 8-
history | tail | cut -c 8-
#创建公钥
ssh-keygen
#查某个java服务
ps -ef | grep `jps | grep gdm | awk '{print $1}'`