centos 开机执行脚本启启动php脚本 执行 php -q /www/1.php

CentOS系统初始安装MySQL、PHP和Nginx的脚本-linux-操作系统-壹聚教程网CentOS系统初始安装MySQL、PHP和Nginx的脚本
本文章来给各位同学介绍CentOS系统初始安装MySQL、PHP和Nginx的脚本,有需要了解的朋友不防进入参考。
&#!/bin/sh
&# by Jet Ma from
&# version v0.2 build6
&# Install Nginx, MySQL and PHP
&# CentOS 5.5 64bit
&# ----------- 配置信息 -----------
&# MySQL安装目录
&MYSQL_HOME='/usr/local/mysql'
&# MySQL root账号的密码
&MYSQL_ROOT_PASSWD='root'
&# PHP安装目录
&PHP_HOME='/usr/local/php'
&# Nginx安装目录
&NGINX_HOME='/usr/local/'
&# ----------- 检测是否是root账号 -----------
&if [ $(id -u) != &0& ]; then
&&&& echo -e &e[1;31m This scripts MUST under root user or group!! e[0m&
&&&& exit 2
&# 首先打开账号权限文件
&chattr -i /etc/passwd
&chattr -i /etc/shadow
&chattr -i /etc/group
&chattr -i /etc/gshadow
&# 关闭防火墙
&/etc/init.d/iptables stop
&# ----------- 安装需要的基础依赖库 -----------
&echo -e &e[1;36m 安装需要的基础依赖库 ... e[0m&
&yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
&# ----------- 安装MySQL -----------
&echo -e &e[1;36m 安装MySQL ... e[0m&
&mkdir downloads
&cd downloads
&tar xzvf mysql-5.1.65.tar.gz
&cd mysql-5.1.65
&./configure --prefix=$MYSQL_HOME --with-charset=utf8 --with-extra-charsets=all --without-debug --enable-thread-safe-client --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --without-isam --with-plugins=innobase
&make && make install
&# 设置启动的用户
&groupadd mysql
&useradd -s /sbin/nologin -M -g mysql mysql
&cd $MYSQL_HOME
&# 设置安装目录权限给mysql用户和用户组
&chown -R mysql .
&chgrp -R mysql .
&bin/mysql_install_db --user=mysql
&chown -R root .
&chown -R mysql var
&cp share/mysql/f /f
&sed -i 's/skip-locking/skip-external-locking/g' /f
&cp share/mysql/mysql.server /etc/init.d/mysql
&chmod +x /etc/init.d/mysql
& /etc/init.d/mysql start
& bin/mysqladmin -uroot pass $MYSQL_ROOT_PASSWD
& history -c
& /etc/init.d/mysql restart
&# ----------- 安装PHP与PHP-FPM -----------
&echo -e &e[1;36m 安装PHP与PHP-FPM ... e[0m&
&# 创建账号
&groupadd www
&useradd -s /sbin/nologin -M -g www www
&# 下载libmcrypt,有两个文件
&cd ~/downloads
&wget -c &&
&wget -c &&
&# 下载libmhash
&wget -c &&
&# 首先安装libmcrypt
&tar zxvf libmcrypt-2.5.8.tar.gz
&cd libmcrypt-2.5.8
&./configure
&make && make install
&cd libltdl/
&./configure --enable-ltdl-install
&make && make install
&# 接下来安装mhash,因为mcrypt需要mhash的依赖
&cd ../../
&tar jxvf mhash-0.9.9.9.tar.bz2
&cd mhash-0.9.9.9
&./configure
&make && make install
&# 最后安装mcrypt
&tar xzxvf mcrypt-2.6.8.tar.gz
&cd mcrypt-2.6.8
&# 将mhash加入ld library路径中
&export LD_LIBRARY_PATH=/usr/local/lib
&./configure
&make && make install
&# 下载PHP和对应版本的PHP-FPM
&# 在目录下选择与安装php版本一致的PHP-FPM,否则会引起兼容性问题
&# 如果是5.2.x的版本的话,还需要下载PHP Hash冲突的补丁,5.3+不需要下载了
&wget -c /laruence//raw/master/php-5.2-max-input-vars/php-5.2.17-max-input-vars.patch
&tar xzvf php-5.2.17.tar.gz
&# 将php-fpm以补丁的形式写入到php源码中
&gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
&# 写入hash冲突补丁,php 5.3+不需要
&patch -d php-5.2.17 -p1 & php-5.2.17-max-input-vars.patch
&cd php-5.2.17
&# 这里将到/usr/local/php目录下面,引用的目录为/usr/local/mysql,这里需要根据实际情况进行修改
&./configure --prefix=$PHP_HOME --with-config-file-path=$PHP_HOME/etc --with-mysql=$MYSQL_HOME --with-mysqli=$MYSQL_HOME/bin/mysql_config --with--dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap
&make ZEND_EXTRA_LIBS='-liconv'
&make install
&cp php.ini-dist /usr/local/php/etc/php.ini
&# 编译安装PHP的扩展模块
&cd ~/downloads
&# 安装&a href=&& target=&_blank&&pdo_mysql&/a&
&tar zxvf PDO_MYSQL-1.0.2.tgz
&cd PDO_MYSQL-1.0.2
&$PHP_HOME/bin/phpize
&./configure --with-php-config=$PHP_HOME/bin/php-config --with-pdo-mysql=$MYSQL_HOME
&make && make install
&# 安装eAccelerator
&tar jxvf eaccelerator-0.9.6.1.tar.bz2
&cd eaccelerator-0.9.6.1
&$PHP_HOME/bin/phpize
&./configure --enable-shared --with-php-config=$PHP_HOME/bin/php-config
&make && make install
&# 修改php.ini文件来启用安装的第三方模块
&sed -i -e &s:^extension_dir.*:extension_dir=&$PHP_HOME/lib/php/extensions/no-debug-non-zts-/&:g& $PHP_HOME/etc/php.ini
&# 增加扩展
&cat && $PHP_HOME/etc/php.ini &&EOF
&extension=eaccelerator.so
&extension=pdo_mysql.so
&[eaccelerator]
&eaccelerator.shm_size=&32&
&eaccelerator.cache_dir=&/tmp/eaccelerator&
&eaccelerator.enable=&1&
&eaccelerator.optimizer=&1&
&eaccelerator.check_mtime=&1&
&eaccelerator.debug=&0&
&eaccelerator.filter=&&
&eaccelerator.shm_ttl=&0&
&eaccelerator.shm_prune_period=&0&
&eaccelerator.shm_only=&0&
&# 创建eaccelerator的临时目录
&mkdir /tmp/eaccelerator
&chmod 777 /tmp/eaccelerator
&# ----------- 安装Nginx -----------
&echo -e &e[1;36m 安装Nginx ... e[0m&
&# 下载安装最新的pcre库
&cd ~/downloads
&tar xzvf pcre-8.31.tar.gz
&cd pcre-8.31
&./configure
&make && make install
&# 安装TCMalloc提升Nginx性能
&# 如果是64位系统的话首先需要安装libunwind库,32位系统不需要安装。
&tar xzvf libunwind-1.0.1.tar.gz
&cd libunwind-1.0.1
&CFLAGS=-fPIC ./configure
&make CFLAGS=-fPIC
&make CFLAGS=-fPIC install
&# 安装google-perftools
&tar xzvf gperftools-2.0.tar.gz
&cd gperftools-2.0
&./configure
&make && make install
&echo &/usr/local/lib& & /etc/ld.so.conf.d/usr_local_lib.conf
&# 安装Nginx
&tar xzvf nginx-1.2.3.tar.gz
&cd nginx-1.2.3
&./configure --prefix=$NGINX_HOME --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-google_perftools_module
&make && make install
&# 64位增加库的链接
&ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1
&ln -s /usr/local/lib/libprofiler.so /lib64/libprofiler.so.0
&ln -s /usr/local/lib/libunwind.so /lib64/libunwind.so.8
&# 启用TCMalloc
&mkdir /tmp/tcmalloc
&chmod 777 /tmp/tcmalloc
&# 修改nginx.conf配置文件,在pid这行下面添加配置如下信息
&sed -i -e 's:^#pid.*:&ngoogle_perftools_profiles /tmp/:g' $NGINX_HOME/conf/nginx.conf
&# 增加日志自动切割脚本
&echo '#!/bin/bash' & ${NGINX_HOME}/sbin/cutlogs.sh
&echo &mkdir -p ${NGINX_HOME}/logs/$(date +%Y)/$(date +%m)
&mv ${NGINX_HOME}/logs/access.log ${NGINX_HOME}/logs/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log
&mv ${NGINX_HOME}/logs/error.log ${NGINX_HOME}/logs/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log
&kill -USR1 `cat ${NGINX_HOME}/logs/nginx.pid`& && ${NGINX_HOME}/sbin/cutlogs.sh
&# 增加执行权限并添加到任务中
&chmod +x ${NGINX_HOME}/sbin/cutlogs.sh
&crontab -l & tmpcrontab
&echo &00 00 * * * /bin/bash ${NGINX_HOME}/sbin/cutlogs.sh& && tmpcrontab
&crontab tmpcrontab
&rm -f tmpcrontab
&# 最后关闭账号权限文件
&chattr +i /etc/passwd
&chattr +i /etc/shadow
&chattr +i /etc/group
&chattr +i /etc/gshadow
&# 打开防火墙
&/etc/init.d/iptables start
&# ----------- 设置为开机启动 -----------
&echo -e &e[1;36m 将MySQL、PHP-FPM和Nginx设置为开机启动 ... e[0m&
&cat && /etc/rc.local &&EOF
&/etc/init.d/mysql start
&ulimit -SHn 65535
&$PHP_HOME/sbin/php-fpm start
&$NGINX_HOME/sbin/nginx
&cat && EOF
&+--------------------------------------------------------------+
&&&& 已经安装完成MySQL、PHP和Nginx
&&&& 请使用 $PHP_HOME/bin/php -version 查看php是否成功运行并包含扩展
&&&& 请使用 $NGINX_HOME/sbin/nginx -t 查看nginx配置信息是否成功
&&&& 最后还需要对mysql、php-fpm和nginx配置文件进行优化处理!
&+--------------------------------------------------------------+
上一页: &&&&&下一页:相关内容centos 安装ngnix+php+php-fpm
1.安装必要组建
yum -y install gcc pcre-devel openssl openssl-devel
2.下载安装ngnix
http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.2.9.tar.gz
tar zxvf nginx-1.2.9.tar.gz
cd nginx-1.2.9
添加一个不能登录的且没有主目录 名为nginx的用户
useradd -s /sbin/nologin -M nginx
./configure --prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_gzip_static_module
make && make install
添加一个systemV风格的启动脚本
vim /etc/init.d/nginxd
# nginx - this script starts and stops the nginx daemon
# chkconfig:
# description:
Nginx is an HTTP(S) server, HTTP(S) reverse \
proxy and IMAP/POP3 proxy server
# processname: nginx
/etc/nginx/nginx.conf
/etc/sysconfig/nginx
# pidfile:
/var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ &$NETWORKING& = &no& ] && exit 0
nginx=&/usr/sbin/nginx&
prog=$(basename $nginx)
NGINX_CONF_FILE=&/etc/nginx/nginx.conf&
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/nginx.lock
make_dirs() {
# make required directories
user=`nginx -V 2&&1 | grep &configure arguments:& | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2&&1 | grep 'configure arguments:'`
for opt in $ do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d &=& -f 2`
if [ ! -d &$value& ]; then
# echo &creating& $value
mkdir -p $value && chown -R $user $value
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $&Starting $prog: &
daemon $nginx -c $NGINX_CONF_FILE
[ $retval -eq 0 ] && touch $lockfile
return $retval
echo -n $&Stopping $prog: &
killproc $prog -QUIT
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
restart() {
configtest || return $?
reload() {
configtest || return $?
echo -n $&Reloading $prog: &
killproc $nginx -HUP
force_reload() {
configtest() {
$nginx -t -c $NGINX_CONF_FILE
rh_status() {
status $prog
rh_status_q() {
rh_status &/dev/null 2&&1
case &$1& in
rh_status_q && exit 0
rh_status_q || exit 0
restart|configtest)
rh_status_q || exit 7
force-reload)
force_reload
condrestart|try-restart)
rh_status_q || exit 0
echo $&Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}&
保存退出 并给/etc/init.d/nginxd 赋予执行权限
chmod +x /etc/init.d/nginxd
chkconfig --add nginxd
##让入开机启动选项中
chkconfig nginxd on
#让其开机自动启动
service nginxd
#立即启动nginx 服务
这是一个我的配置文件
worker_processes
#error_log
logs/error.
#error_log
logs/error.
#error_log
logs/error.
logs/nginx.
worker_connections
server_ #返回错误页面时是否在server中注明nginx版本
/var/log/nginx/error.
log_format
'$remote_addr - $remote_user [$time_local] &$request& '
'$status $body_bytes_sent &$http_referer& '
'&$http_user_agent& &$http_x_forwarded_for&';
default_type
application/octet-
#可以启用Linux上的sendfile系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。
#在打开sendfile选项时,确定是否开启FreeBSD系统上的TCP_NOPUSH或Linux系统上的TCP_CORK功能。打开tcp_nopush后,将会在发送响应时把整个响应包头放到一个TCP包中发送。
#确定对keepalive连接是否使用TCP_NODELAY选项。
#keepalive_timeout
keepalive_timeout
#一个keepalive连接在闲置超过一定时间后(默认的是75秒),服务器和浏览器都会去关闭这个连接。当然,keepalive_timeout配置项是用来约束Nginx服务器的,Nginx也会按照规范把这个时间传给浏览器
,但每个浏览器对待keepalive的策略有可能是不同的。
include /etc/nginx/conf.d/*.
3.下载安装php
yum -y install libjpeg libjpeg-devel libpng libpng-devel libxml2 libxml2-devel curl curl-devel
wget http://cn2.php.net/distributions/php-5.5.12.tar.gz
tar zxvf php-5.5.12.tar.gz
cd php-5.5.12
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-gd \
--with-mysql \
--with-mysqli \
--with-pdo-mysql \
--with-iconv \
--with-zlib \
--enable-xml \
--enable-inline-optimization \
--enable-fpm \
--enable-mbstring \
--with-openssl \
--without-pear \
--with-gettext \
--enable-session
--with-curl \
--with-mhash
make && make install
在/etc/init.d/下新建php-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start:
$remote_fs $network
# Required-Stop:
$remote_fs $network
# Default-Start:
# Default-Stop:
# Short-Description: starts php-fpm
# Description:
starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=/var/run/php-fpm/php-fpm.pid
php_opts=&--fpm-config $php_fpm_CONF --pid $php_fpm_PID&
wait_for_pid () {
while test $try -lt 35 ; do
case &$1& in
'created')
if [ -f &$2& ] ; then
'removed')
if [ ! -f &$2& ] ; then
try=`expr $try + 1`
case &$1& in
echo -n &Starting php-fpm &
$php_fpm_BIN --daemonize $php_opts
if [ &$?& != 0 ] ; then
echo & failed&
wait_for_pid created $php_fpm_PID
if [ -n &$try& ] ; then
echo & failed&
echo & done&
echo -n &Gracefully shutting down php-fpm &
if [ ! -r $php_fpm_PID ] ; then
echo &warning, no pid file found - php-fpm is not running ?&
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n &$try& ] ; then
echo & failed. Use force-quit&
echo & done&
if [ ! -r $php_fpm_PID ] ; then
echo &php-fpm is stopped&
PID=`cat $php_fpm_PID`
if ps -p $PID | grep -q $PID; then
echo &php-fpm (pid $PID) is running...&
echo &php-fpm dead but pid file exists&
force-quit)
echo -n &Terminating php-fpm &
if [ ! -r $php_fpm_PID ] ; then
echo &warning, no pid file found - php-fpm is not running ?&
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n &$try& ] ; then
echo & failed&
echo & done&
echo -n &Reload service php-fpm &
if [ ! -r $php_fpm_PID ] ; then
echo &warning, no pid file found - php-fpm is not running ?&
kill -USR2 `cat $php_fpm_PID`
echo & done&
echo &Usage: $0 {start|stop|force-quit|restart|reload|status}&
chmod +x /etc/init.d/php-fpm #添加执行权限
chkconfig --add php-fpm
#添加到chkconfig列表
chkconfig php-fpm on #设置开机启动
mkdir /var/run/php-fpm
/etc/init.d/php-fpm start #启动php-fpm
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?linux&crontab&定时执行php脚本
&执行crontab -e,打开定时任务文本,在里面编辑定时任务脚本。
&我的定时脚本 :
& 0 12 * * * /usr/local/php/bin/php
&/var/www/html/testmall/includes/task.base.php
& 0 12 * * * /usr/local/php/bin/php
&/var/www/html/testmail.php
& 每天12点0分
执行task.base.php文件和testmail.php
基本格式 :&
* &* &* &*
&* &command 分 时 日 月 周
第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31
第4列表示月份1~12&
第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 &
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
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd
上面的例子表示每星期六的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&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您的浏览器已经禁用了脚本,这可能会影响您正常使用本站的功能。
CentOS 下管理自定义 PHP 计划任务代码的守护进程脚本
有需求想实现比
更频繁一点的计划任务,折腾一通之后,写下这个脚本,目前在
6 下测试没有问题:
#!/bin/bash
# : 35 90 12
# description: Queue Daemon
# Get function from functions library
. /etc/.d/functions
访问路径,如果
是编译安装则需要修改
php_path=&/usr/bin/php&
# PHP 执行用户名
环境下常见为 nginx 或 www,
# Apapche 环境下常见为 php 或 apache
# 用在某些时候需要在计划任务中生成文件时文件权限不正确的问题
php_user=nginx
# 要管理的 PHP 计划任务脚本
# 该目录下必须都是 PHP 可执行代码文件
queue_path=&/www/micate.dev/crontab/&
# PHP 计划任务执行日志保存路径
# 默认以 脚本名.log 的方式存储
log_path=&/var/log/queue/&
# 守护进程 PID 路径
pid_path=&/var/run/queued.pid&
# 守护进程在启动退出时的提示名称
prog=&Queued&
# Start the
-n $&Starting $prog: &
if [ -f $pid_path ]; then
echo -n &pid &$pid_path& exists.&
return <span style="COLOR: #
if [ ! -d $log_path ]; then
-p $log_path
queues=$( $queue_path)
for queue in $queues
-u $php_user
$php_path $queue_path$queue <span style="COLOR: #&&$log_path$queue.log <span style="COLOR: #&/dev/null &
if [ ! $retval -eq <span style="COLOR: # ]; then
echo -n $queue& init failed.&
return <span style="COLOR: #
echo $! && $pid_path
return $retval
# Stop the service
echo -n $&Stopping $prog: &
if [ ! -f $pid_path ]; then
echo -n &pid &$pid_path& not exists.&
return <span style="COLOR: #
queues=$( $pid_path)
for queue in $queues
-9 $queue <span style="COLOR: #&/dev/null <span style="COLOR: #&&<span style="COLOR: #
if [ ! $retval -eq <span style="COLOR: # ]; then
echo -n $queue& stop failed.&
return <span style="COLOR: #
-f $pid_path
return $retval
### main logic ###
case &$1& in
echo $&Usage: $0 {start|stop|restart}&
<span style="COLOR: #
exit <span style="COLOR: #
使用方法:
根据实际情况,按照上面的配置提示,修改相应配置,并保存为 /etc/init.d/queued(建议以这样的方式命名,注意路径必须是 /etc/init.d/)
在 Shell 里面执行:
# 为守护进程脚本增加执行权限
+x /etc/init.d/queued
# 设置开机启动
chkconfig queued on
守护进程设置完成。
在上面配置的目录中添加测试 PHP 计划任务脚本,如 hello.php:
// 注意,推荐使用死循环的方式
// 这个守护进程脚本也是以这个思路来写的
while (true)
// 做点事情
// 注意,这里的输出会记录到日志文件里面,可以输出些有用的信息来帮助排除问题
echo &hello from queued.\n&;
// 延迟时间,建议用秒级别的,usleep ... 你确定么?
好了,来运行看看:
/etc/init.d/queued start
查看下日志目录:
/var/log/queue/hello.php.log
其他的,比如:
# 停止所有计划任务
/etc/init.d/queued stop
# 重新启动守护进程脚本
/etc/init.d/queued restart
由于是基于死循环的方式实现,如果代码里面有引入基础文件后的死循环操作,那依赖基础文件中的变量的代码部分,要注意调整,举例来说:
define(&#39;START_TIME&#39;, microtime(true));
// 假如这个文件里面定义了
// 以备后面的代码获取当前时间用
//(避免一次请求中多次调用 time() 函数带来的性能损失)
require &#39;../init.php&#39;;
$interval = value(config(&#39;&#39;), &#39;interval&#39;, 20);
$interval_size = value(config(&#39;mail&#39;), &#39;interval_size&#39;, 50);
while (true)
$queue = & factory::queue(&#39;mail&#39;);
// 这里的定时循环,用到了 TIME 常量
// 比如记录执行时间,甚至用 TIME 常量做查询条件
echo $queue-&interval($interval_size);
sleep($interval);
2. 看了上面的注释,问题就比较明显了。当以普通用户请求过去时,由于是正常流程,每次请求发起后,TIME 都会重新赋予正确的当前时间;但当使用死循环后,以后的每次 interval 用到的时间都会是 该计划任务脚本启动时间。这就是问题,需要注意和调整。
3. 修改和添加计划任务后,需要重新启动守护进程,方法上面已经介绍了,restart 就可以。
4. 担心日志过多?设置下日志自动滚动切割吧:
# 在 /etc/.d/ 目录下建立 queued 文件
vim /etc/logrotate.d/queued
# 输入如下的信息,路径之类的要和你自己设置的保持一致
/var/log/queue/*log {
notifempty
sharedscripts
postrotate
/etc/init.d/queued restart & /dev/null 2&/dev/null || true
保存文件,完成。这样,每天日志会自动滚动切割,最多保留 10 个日志文件(未验证这个步骤... 如有问题请反馈)。
4. 进程崩溃、服务器断电...导致守护进程起不来或停不了了?
*** 关键词,看是否有在运行的 PHP 计划任务代码,kill 掉,然后删除 pid 文件,重新启动即可。&
其实 crontab 也有对应的解决方法:
# 打开 crontab 编辑界面
crontab -e
# 输入类似的设置
* * * * * /bin/
* * * * * sleep 20; /bin/date
* * * * * sleep 40; /bin/date
思想就是... 同时添加多个任务,然后每个之前以适当的延时隔离开,就是说每分钟会有 N 个程序被触发,但会逐个延迟执行,也是个不错的解决思路。
邮件(不会被泄露)
Fatal error:
Call to undefined function wp_smilies() in /data/wsdata/wwwroot/sunkai/linuxde/www/wp-content/themes/linuxde/comments.php on line 68}

我要回帖

更多关于 centos 执行脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信