Jiliuke

激流客

文件名nginx_access_log.sh 以下是脚本 #!/bin/bash - #1.nginx日志存放路径 first_path=”/lnmp/nginx/logs” path_array=($first_path) #2.日志标识前缀数组 first_prefix_sign=”first” prefix_array=($first_prefix_sign) #3.日志成功错误标识后缀数组 bool_array=(“access” “error”) #4.nginx日志切割备份后缀 postfix=`date -d ‘+0 days’ +%Y%m%d`“.log” #5.备份当前的日志文件,重命名改为日期后缀 for path in ${path_array[*]} do for prefix in ${prefix_array[*]} do for bool in ${bool_array[*]} do file=$path/$bool.log backfile=$path/$prefix.$bool.$postfix echo $file echo $backfile if [ -e $file ];then mv $file  $backfile fi done done done #6.查找nginx进程号,让其产生新的日志文件 nginx_pid=`ps -ef|grep -E ‘nginx: master process nginx’|grep -v ‘grep’|awk ‘{print $2}’` #USR1:Reopen log files,刷新nginx日志文件 kill -HUP $nginx_pid

CentOS  mini默认是无法上网,需要进行如下设置: 一、编辑网络设置: 修改ONBOOT值为yes

1

DEVICE=eth0

2

HWADDR=00:0C:29:4E:B7:C9

3

TYPE=Ethernet

4

UUID=a3d55d06-78fe-4542-a44a-d95cb5667cd6

5

ONBOOT=no

6

NM_CONTROLLED=yes

7

BOOTPROTO=dhcp

二、重启network服务 service network restart 手动配置IP: vi  /etc/sysconfig/network-scripts/ifcfg-ethx

linux-iplinux-ip

今天我来给各位同学介绍一下关于php-fpm进程关闭与重启命令吧,PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的并且PHP5.3.3已经集成php-fpm了,不再是第三方的包了哦。

先来理解一下什么是php-fpm PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。   现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。 PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。   使用PHP-FPM来控制PHP-CGI的FastCGI进程 master进程可以理解以下信号 INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块 示例: php-fpm 关闭:

 代码如下

复制代码

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

php-fpm 重启:

 代码如下

复制代码

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

查看php-fpm进程数:

 代码如下

复制代码

ps aux | grep -c php-fpm

php-fmp的重启 (方法二) 先执行

 代码如下

复制代码

killall php-fpm

再执行(usr/local/php是php的安装目录)

 代码如下

复制代码

/usr/local/php/sbin/php-fpm &

Configure: 项目安装: 比如用源码包安装gaim 的 ./configure –prefix=/opt/gaim make make install 如果安装mlterm ./configure –prefix=/opt/mlterm make make install 把源码包安装的软件,都指定安装在 /opt目录中 项目删除: 如果删除,就删除相应的软件目录; 有些软件要在解压安装目录中执行 make uninstall 这样就卸载掉了 CMake: 项目安装: 1、首先安装CMake工具 wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz tar xvzf cmake-2.8.4.tar.gz cd cmake-2.8.4 ./configure make make install 以安装MySQL 5.5.9为例,执行:

tar zxvf mysql-5.5.9.tar.gz cd mysql-5.5.9/ rm CMakeCache.txt cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/-DMYSQL_DATADIR=/home/mysql/data/-DEFAULT_CHARSET=utf8 -DMYSQL_TCP_PORT=3306-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DWITH_DEBUG=0-DWITH_INNOBASE_STORAGE_ENGINE=1-DMYSQL_USER=mysql

这些参数的意思: -DCMAKE_INSTALL_PREFIX=/data/mysql 准备安装到那里 -DEFAULT_CHARSET=utf8 默认的字符集 -DMYSQL_TCP_PORT=3306 数据库的监听端口 -DMYSQL_UNIX_ADDR=/tmp/mysql3306.sock 本机连回数据库的unix socket -DWITH_DEBUG=0 关闭debug模式 -DWITH_INNOBASE_STORAGE_ENGINE=1 打开innodb引擎

make && make install

项目删除: CMake 默认不提供 uninstall 这个 target,想要的话,输入: xargs rm < install_manifest.txt 对于不修改配置的项目足够了,manifest.txt 是CMake 生成的安装文件列表。

1.nginx http://nginx.org/en/docs/configure.html

2.php http://php.net/manual/en/install.unix.nginx.php

3.cmake http://www.cmake.org/download/

4.mysql

/lnmp/cmake/bin/cmake
-DCMAKE_INSTALL_PREFIX=/lnmp/mysql
-DMYSQL_DATADIR=/lnmp/mysql/data
-DSYSCONFDIR=/lnmp/mysql/etc
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DMYSQL_UNIX_ADDR=/lnmp/mysql/mysql.sock
-DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci

make && make install

yum -y install ncurses-devel

新安装的mysql如果需要密码,查看cat /root/.mysql_secret中即为mysql的默认root密码

进入后set password=”123456”;

安装完成后需要添加php扩展,先cd到php安装源文件ext/gd(以安装gd为例)

/php路径/bin/phpize 生成configure文件

./configure –with-php-config=/php路径/bin/php-config

php查看安装的模块php -m

加入环境变量例子(环境变量地址:/etc/profile)

PATH=/lnmp/mysql/bin:$PATH

export PATH

source /etc/profile

默认情况下,/etc/passwd 存储有关本地用户的信息 /etc/passwd 采用以下格式:

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間1

1)username        UID到名称的一种映射,用户名 2)password         保存密码的位置,现在保存在/etc/shadow 中 3)UID                   用户ID 4)GID                  主组ID 5)GECOS            字段存储任意文本,用户注释 6)/home/dir          用户的家目录 7)shell                 用户登入后使用的shell名称 passwd文件是普通的文本文件,可以手工修改文件中的用户信息(usermod),或者最后添加新行以增加新的用户(useradd)。 如果同时2个人修改文件passwd的话,有毁坏文件的危险。建议采用vipw命令,它可以将passwd文件锁住,以防止其他人同时使用。 用户密码存储在/etc/shadow,格式为(以“:”为分割符):

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間2

  1)用户名 2)加密的密码 3)上次更改密码的日期(从1970-1-1开始) 4)最短密码期限(按天计算,0 = 无最短期限) 5)最长密码期限(按天计算) 6)密码警告期限(按天计算,0 = 未指定警告) 7)密码非活动期限(按天计算) 8)账号到期时间(从1970-1-1开始) 9)保留域 /etc/shadow 由 pwconv 命令根据/etc/passwd中的数据自动产生。

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間3

改使用者的密码 — passwd 参数 -l 关闭账号密码。效果相当于usermod -L,只有root才有权使用此项。 -u 恢复账号密码。效果相当于usermod -U,同样只有root才有权使用。 -g 修改组密码。gpasswd的等效命令。 -f 更改由finger命令访问的用户信息。 -d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用。 -S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用。

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間4

更改密码时效 — chage 参数 -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M 密码保持有效的最大天数。 -W 用户密码到期前,提前收到警告信息的天数。 -E 帐号到期的日期。过了这天,此帐号将不可用。 -d 上一次更改的日期。 -I(大写的i) 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l 列出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間5

关于账号时间图示:

/etc/passwd 和 /etc/shadow 文件内容及其解释 - 梦に者 - 梦に空間6

问题:由于浏览器照顾用户安全,所以不暴露用户实际路径,获取图片真实路径被强行修改成c:/fakepath

解决办法:可以按照火狐处理类似情况的方法处理

function getFullPath(obj)

{

    if(obj)

    {

        //ie

        if (window.navigator.userAgent.indexOf(“MSIE”)>=1)

        {

            obj.select();

            if(window.navigator.userAgent.indexOf(“MSIE”) == 25){

                obj.blur();

            }

            return document.selection.createRange().text;

        }

        //firefox

        else if(window.navigator.userAgent.indexOf(“Firefox”)>=1)

        {

            if(obj.files)

            {

                //return obj.files.item(0).getAsDataURL();

                return window.URL.createObjectURL(obj.files.item(0));

            }

            return obj.value;

        }else{ //chrome

   return window.URL.createObjectURL(obj.files.item(0));

  }

        return obj.value;

    }

}

这篇文章主要介绍了PHP二维数组排序的3种方法和自定义函数分享,需要的朋友可以参考下

关于排序一般我们都是通过数据库或者nosql(eg:redis)先排好序然后输出到程序里直接使用,但是有些时候我们需要通过PHP直接来对数组进行排序,而在PHP里存储数据用到最多的就是对象和数组,但处理较多的就是数组,因为有非常丰富的内置函数库(其实对象一定程度上也可以理解为是数组),这些函数库很大程度上可以帮助我们实现某些功能。常用的系统函数有sort、asort、arsort、ksort、krsort等等,这里我主要说下对二维数组的排序,两种方法: 一、用PHP自带array_multisort函数排序

复制代码代码如下:

67, 'edition' => 2); $data\[\] = array('volume' => 86, 'edition' => 1); $data\[\] = array('volume' => 85, 'edition' => 6); $data\[\] = array('volume' => 98, 'edition' => 2); $data\[\] = array('volume' => 86, 'edition' => 6); $data\[\] = array('volume' => 67, 'edition' => 7); // 取得列的列表 foreach ($data as $key => $row) { $volume\[$key\]  = $row\['volume'\]; $edition\[$key\] = $row\['edition'\]; } array\_multisort($volume, SORT\_DESC, $edition, SORT\_ASC, $data); print\_r($data); ?>

输出结果:

复制代码代码如下:

Array ( [0] => Array ( [volume] => 98 [edition] => 2 ) [1] => Array ( [volume] => 86 [edition] => 1 ) [2] => Array ( [volume] => 86 [edition] => 6 ) [3] => Array ( [volume] => 85 [edition] => 6 ) [4] => Array ( [volume] => 67 [edition] => 2 ) [5] => Array ( [volume] => 67 [edition] => 7 ) )

关于array_multisort官方文档也有比较详细的说明:http://www.php.net/manual/zh/function.array-multisort.php 二、自定义函数排序1

复制代码代码如下:

67, 'edition' => 2); $data\[\] = array('volume' => 86, 'edition' => 1); $data\[\] = array('volume' => 85, 'edition' => 6); $data\[\] = array('volume' => 98, 'edition' => 2); $data\[\] = array('volume' => 86, 'edition' => 6); $data\[\] = array('volume' => 67, 'edition' => 7);    // 取得列的列表 foreach ($data as $key => $row) { $volume\[$key\]  = $row\['volume'\]; $edition\[$key\] = $row\['edition'\]; } $ret = arraySort($data, 'volume', 'desc'); print\_r($ret); /** * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序 * @param array $arr 将要排序的数组 * @param string $keys 指定排序的key * @param string $type 排序类型 asc | desc * @return array */ function arraySort($arr, $keys, $type = 'asc') { $keysvalue = $new\_array = array(); foreach ($arr as $k => $v){ $keysvalue\[$k\] = $v\[$keys\]; } $type == 'asc' ? asort($keysvalue) : arsort($keysvalue); reset($keysvalue); foreach ($keysvalue as $k => $v) { $new\_array\[$k\] = $arr\[$k\]; } return $new\_array; } ?>

输出结果:

复制代码代码如下:

Array ( [3] => Array ( [volume] => 98 [edition] => 2 )    [4] => Array ( [volume] => 86 [edition] => 6 ) [1] => Array ( [volume] => 86 [edition] => 1 ) [2] => Array ( [volume] => 85 [edition] => 6 ) [5] => Array ( [volume] => 67 [edition] => 7 ) [0] => Array ( [volume] => 67 [edition] => 2 ) )

这个自定义函数与系统函数的一个区别就是:自定义函数只支持针对某一个key的排序,如果要支持多个key的排序需要执行多次; 而系统函数array_multisort可以一次性对多个key且可以指定多个排序规则,系统函数还是相当强大的,推荐使用系统函数,毕竟是C底层实现的,这里只是举例说明如果通过自定义函数来对数组进行排序,当然这个自定义函数也可以继续扩展来支持更多的排序规则。在取排名、排行榜、成绩等场景中用到的还是非常多的。 三、自定义函数排序2 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:

复制代码代码如下:

function array_sort($arr,$keys,$type=’asc’){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == ‘asc’){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[$k] = $arr[$k]; } return $new_array; }

它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:

复制代码代码如下:

$array = array( array(‘name’=>’手机’,’brand’=>’诺基亚’,’price’=>1050), array(‘name’=>’笔记本电脑’,’brand’=>’lenovo’,’price’=>4300), array(‘name’=>’剃须刀’,’brand’=>’飞利浦’,’price’=>3100), array(‘name’=>’跑步机’,’brand’=>’三和松石’,’price’=>4900), array(‘name’=>’手表’,’brand’=>’卡西欧’,’price’=>960), array(‘name’=>’液晶电视’,’brand’=>’索尼’,’price’=>6299), array(‘name’=>’激光打印机’,’brand’=>’惠普’,’price’=>1200) );$ShoppingList = array_sort($array,’price’); print_r($ShoppingList);

上面是对$array这个二维数组按照’price’从低到高的排序。

安装crontab: yum install crontabs  说明: /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置  查看crontab服务状态: service crond status  手动启动crontab服务: service crond start  查看crontab服务是否已设置为开机启动,执行命令: ntsysv  加入开机自动启动: chkconfig --level 35 crond on 1,crontab命令 功能说明:设置计时器。 语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下: Minute Hour Day Month DayOFWeek Command 参  数: -e  编辑该用户的计时器设置。 -l  列出该用户的计时器设置。 -r  删除该用户的计时器设置。 -u<用户名称>  指定要设定计时器的用户名称。 2,crontab 格式 基本格式 : * *  *  *  *  command 分 时 日 月 周  命令 第1列表示分钟1~59 每分钟用或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列 表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 *crontab特殊的符号说明:** ““代表所有的取值范围内的数字。特别要注意哦! “/“代表每的意思,如”/5”表示每5个单位 “-“代表从某个数字到某个数字 “,”分散的数字 crontab文件的一些例子: 30 21 * * * /usr/local/etc/rc.d/lighttpd restart  上面的例子表示每晚的21:30重启 apache。   45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart  上面的例子表示每月1、 10、22日的4 : 45重启apache。   10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart  上面的例子表示每周六、周日的1 : 10重启apache。   0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart  上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。   0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart  上面的例子表示每星期六的11 : 00 pm重启apache。   * */1 * * * /usr/local/etc/rc.d/lighttpd restart  每一小时重启apache   * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart  晚上11点到早上7点之间,每 隔一小时重启apache   0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart  每月的4号与每周一到周三 的11点重启apache   0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart  一月一号的4点重启apache   */30 * * * * /usr/sbin/ntpdate 210.72.145.44  每半小时同步一下时间   -------------------------------- 如何查看crontab的日志记录 ——————————————————– 昨天crontab中的同步任务没有执行,不知道是什么原因没有执行,貌似任务hang住了,想查询一下crontab到底问题出在哪里,或者hang在了什么地方。 1.  linux 看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察 2.  unix 在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。 3. mail任务 在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。

0%