您的位置:

如何对nginx开机自启动linux进行配置

一、Linux开机自启动配置文件

Linux系统下,开机自启动需要在/etc/init.d/目录下的脚本文件中配置。这是系统启动时会自动执行的脚本目录,我们可以在该目录下创建适当的脚本,使其达到开机自启动的效果。

首先,在/etc/init.d/目录下创建一个新的nginx脚本:

sudo touch /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

# 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/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    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
}

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)
        $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|reload|force-reload|condrestart}"
        exit 2
esac
exit $?

在指定完毕后,需要赋予权限:

sudo chmod 755 /etc/init.d/nginx

二、Nginx开机自启动linux

在Nginx脚本文件配置好之后,我们将该脚本注册成为服务,随着服务器的启动而启动。使用如下命令:

sudo chkconfig --add nginx
sudo chkconfig --level 345 nginx on

三、Linux开机自启动项

开机自启动项主要是使用chkconfig命令,使用数字标记开启,则相应的服务会在启动时开启,否则就是关闭。如果只想让某个服务在指定级别下开启或关闭,则必须加上 --list 和 --level 参数指定级别。

在linux系统中,有七个级别:
0:关机
1:单用户模式
2:不完全的多用户模式,不含NFS服务
3:完全的多用户模式
4:系统未使用保留
5:X11控制台模式
6:重启

如果想要让nginx开机自启动,则需要设置在3、4、5级别下开启。在执行如下命令:

sudo chkconfig --add nginx
sudo chkconfig --level 345 nginx on

四、Linux设置nginx开机自启动

在前面的配置中,我们已经配置好了nginx的开机自启动项,但是这只是一部分,需要进一步配置才能实现每次开机自动启动nginx。

编辑/etc/rc.local文件,添加如下内容:

sudo vim /etc/rc.local

将下面的命令添加到里面:

/usr/local/nginx/sbin/nginx

然后,配置文件设置为开机自启动:

sudo chmod +x /etc/rc.local

五、Nginx开机自启动命令

在前面的脚本文件中我们已经定义好了Nginx服务的启动、停止和重启命令,分别为:

/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart

如果我们想要手动启动或停止nginx服务,只需要执行下面的命令即可:

/etc/init.d/nginx start
/etc/init.d/nginx stop

六、Nginx开机自启动脚本

上面提供的是一个完整的nginx开机自启动脚本,我们可以根据自己的需要,来对其进一步的修改。例如,我们可以修改Nginx服务的日志输出地址,从/var/log/nginx/error.log修改为/var/log/nginx/nginx_error.log,同时,我们也可以修改启动命令等。以下是修改过的脚本:

#!/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

# 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/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
PID_FILE="/var/run/nginx.pid"
ERROR_LOG="/var/log/nginx/nginx_error.log"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE -p /usr/local/nginx -g "pid $PID_FILE;" -e $ERROR_LOG
    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
}

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
        start
        ;;
    stop)
        rh_status_q || exit 0
        stop
        ;;
    restart)
        restart
        ;;
    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|reload|force-reload|condrestart}"
        exit 2
esac

exit $?

七、Nginx开机自启动Windows

Nginx在Windows下自启动,需要在服务中进行注册,然后手动启动服务即可。下面是注册服务的步骤:

1、创建nginx.vbs文件,内容如下:

Dim xShell
Set xShell = CreateObject("WScript.Shell")
xShell.Run "cmd.exe /c echo nginx -p F:/webserver/nginx-1.19.8/ -c F:/webserver/nginx-1.19.8/conf/nginx.conf > F:/webserver/nginx-1.19.8/runNginx.bat", 0
Set xShell = nothing

2、将脚本运行:

cscript nginx.vbs

3、打开服务(services.msc),找到Nginx,单击启动。

八、Nginx开机自启动管理员权限

在Windows下,注册服务需要管理员或system权限,否则会提示拒绝访问。可以使用以下命令解决这个问题:

sc.exe create Nginx binPath= "D:\Nginx\nginx.exe" start= auto DisplayName= "Nginx" obj= "NT AUTHORITY\LocalService" password= ""

九、Nginx开机自启动脚本Windows

在Windows下,可以使用如下脚本实现Nginx开机自启动:

@echo off
set NginxPath=D:\webserver\nginx-1.19.4
set log_file_path=%NginxPath%\logs\
set pid_file_path=%NginxPath%\logs\nginx.pid

setlocal
set LOGFILE=%log_file_path%nginx.log
set ERRORFILE=%log_file_path%nginx_error.log

set BIN_PATH=%NginxPath%
set WORKING_PATH=%NginxPath%
set ARGS=-p "%BIN_PATH%" -c conf/nginx.conf

set pID=
tasklist /fi "imagename eq nginx.exe" | find ":" >nul && (
  echo nginx is already running
  goto end
)

echo Starting nginx server [nginx] ...
cd /d %WORKING_PATH%
start nginx.exe %ARGS%
ping -n 2 127.0.0.1 >nul

set /a pID=0
for /f "tokens=2" %%i in ('tasklist /fi "imagename eq nginx.exe" /nh') do set /a pID=%%i
echo ... done [PID: %pID%].

:end