Windows:
Windows Service Wrapper【下载 .exe 文件即可,根据系统选择,Win 10 选择 .NET4 版本,以下选择 .NET2 版本】
xxfpm【用来开启 PHP-CGI 多进程】
Nginx:
下载后将WinSW.NET4.exe放入Nginx的安装目录下,并且将其重命名为
nginx-service.exe
,在该目录下新建nginx-service.xml
文件,写入以下配置信息:
<service>
<!-- 服务 ID,命令行使用这个名字可以启动/停止服务 -->
<id>nginx-server</id>
<!-- 服务名称,可任意,为了方便建议和 ID 一致 -->
<name>nginx-server</name>
<!-- 服务描述,任意 -->
<description>nginx-server.</description>
<!-- 启动程序名称,不用修改 -->
<executable>nginx.exe</executable>
<!-- 停止服务时执行程序名称 -->
<!-- 解释一下为何用 Win 的 taskkill 命令。因为 Nginx 利用服务启动的情况下无法使用 nginx -s stop 或 nginx -s quiet 命令结束进程,会提示权限不足 -->
<stopexecutable>taskkill</stopexecutable>
<!-- 以下三行是 taskkill 的参数,不用修改 -->
<stopargument>/F</stopargument>
<stopargument>/IM</stopargument>
<stopargument>nginx.exe</stopargument>
<!-- 日志路径,将生成日志至 nginx/logs 目录 -->
<logpath>logs</logpath>
</service>
以上内容配置好了之后,以管理员身份打开cmd,切换到nginx安装目录下运行命令:nginx-service.exe install 就成功将其注册为Windows服务了,然后运行 nginx-service.exe start 启动服务。这时我们可以在Windows任务管理器的服务中查看该是否成功启动.
PHP:
1.多进程:
在PHP安装同级目录下新建 xxfpm 文件夹
xxfpm
压缩包内打开bin
文件夹,将xxfpm.exe
和pthreadGC2.dll
扔进新建的xxfpm
文件夹.- 将WinSW.NET4.exe放入xxfpm的目录下,并重命名为PHP-CGI.exe.
- 然后创建同名的
PHP-CGI.xml
文件,内容如下:
<service>
<id>PHP-CGI</id>
<name>PHP-CGI</name>
<description>PHP-CGI.</description>
<executable>xxfpm.exe</executable>
<!-- 启动参数 -->
<startargument>"D:/WebDevEnvironment/php71/php-cgi.exe -c D:/WebDevEnvironment/php71/php.ini"</startargument>
<startargument>-n</startargument>
<!-- 启动进程数量,可修改,建议大于 1 -->
<startargument>2</startargument>
<startargument>-i</startargument>
<!-- 监听IP,默认一般都用 127.0.0.1 -->
<startargument>127.0.0.1</startargument>
<startargument>-p</startargument>
<!-- 监听端口,默认一般都用 9000 -->
<startargument>9000</startargument>
<!-- 停止参数 -->
<stopexecutable>taskkill</stopexecutable>
<stopargument>/F</stopargument>
<stopargument>/IM</stopargument>
<stopargument>xxfpm.exe</stopargument>
<logpath>logs</logpath>
</service>
同样以管理员身份打开cmd,切换到xxfpm安装目录下运行命令:PHP-CGI.exe install 就成功将其注册为Windows服务了.
Linux:
nginx:
第一种:
在linux系统的 /etc/init.d/ 目录下创建 nginx 文件,并且在新建文件中添加如下内容:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: NGINX is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /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/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; 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
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
nginx=”/usr/sbin/nginx” 修改成nginx执行程序的路径.
NGINX_CONF_FILE=”/etc/nginx/nginx.conf” 修改成配置文件的路径.
保存后设置权限: chmod a+x /etc/init.d/nginx
这时就可以使用 /etc/init.d/nginx start 和 /etc/init.d/nginx stop 对Nginx进行控制了.
先将nginx服务加入chkconfig管理列表: chkconfig --add /etc/init.d/nginx
加完之后就可以使用service对nginx进行 service nginx start 和 service nginx stop 等操作了.
最后设置开机启动 chkconfig nginx on
第二种:
依然是在linux系统创建 /etc/init.d/nginx 文件,并且在新建文件中添加如下内容:
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
nginxd=/usr/local/nginx/sbin/nginx 修改成nginx执行程序的路径.
nginx_config=/usr/local/nginx/conf/nginx.conf 修改成配置文件的路径.
接着,设置文件的访问权限:
chmod a+x /etc/init.d/nginx (a+x参数表示 ==> all user can execute 所有用户可执行)
打开rc.local文件: vi /etc/rc.local 将 /etc/init.d/nginx start 添加进文件中并保存
下次重启就会生效,实现nginx的自启动.
PHP:
添加方式和Nginx相同.
创建新文件 vim /etc/init.d/php-fpm ,在新建文件中添加如下内容:
#!/bin/sh
# chkconfig: 2345 15 95
# description: PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation \
# with some additional features useful for sites of any size, especially busier sites.
# DateTime: 2016-09-20
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
phpfpm="/usr/local/php/sbin/php-fpm"
prog=$(basename ${phpfpm})
lockfile=/var/lock/subsys/phpfpm
start() {
[ -x ${phpfpm} ] || exit 5
echo -n $"Starting $prog: "
daemon ${phpfpm}
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc ${phpfpm} -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
${phpfpm} -t
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
exit 2
esac
phpfpm="/usr/local/php/sbin/php-fpm" 修改成php执行程序的路径.
lockfile=/var/lock/subsys/phpfpm 修改成php锁的路径.
再就是保存并加到开机启动项里面去: chkconfig --add php-fpm
使用 service php-fpm start 和 service php-fpm stop 测试一下.
最后设置开机启动 chkconfig php-fpm on