Nginx设置开机自动启动

本文介绍如何在Linux环境下创建Nginx服务管理脚本,包括脚本的编写、权限设置及通过chkconfig实现开机自启。文章详细解释了脚本中各部分的作用,并指导如何修改Nginx执行路径和配置文件路径。

1.在/etc/init.d下创建文件nginx

vim /etc/init.d/nginx
内容可以参考[Nginx官方文档]
(https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/)

 

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

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      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
    fi
}

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/local/nginx/sbin/nginx” //修改成nginx执行程序的路径。

NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf” //修改成nginx.conf文件的路径。

2. 保存后设置文件的执行权限

chmod a+x /etc/init.d/nginx

至此就可以通过下面指令控制启动停止

 

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

3.将nginx服务加入chkconfig管理列表

上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便。

chkconfig --add /etc/init.d/nginx

加完这个之后,就可以使用service对nginx进行启动,重启等操作了。

 

service nginx start
service nginx stop
service nginx restart

设置开机自动启动

 

chkconfig nginx on

 

<think>我们正在处理用户关于设置源码安装的Nginx开机自动启动的问题。根据提供的引用,特别是引用[4]和引用[5],我们可以找到两种方法:一种是在Linux系统(如CentOS)下使用systemd服务,另一种是在Windows下使用nginx-service.exe注册为服务。 用户没有明确说明操作系统,但根据引用内容,大部分引用都是关于Linux系统的(如CentOS、openEuler),只有引用[5]提到Windows。因此,我们需要考虑两种情况。但是,用户问题中提到了“源码安装”,通常源码安装在Linux系统中更为常见,所以我们先以Linux为主,同时提供Windows的备选方案。 ### 步骤(针对Linux系统): 根据引用[4]的内容,配置开机自启动需要创建一个systemd服务单元文件。 1. **创建服务文件** 使用文本编辑器(如vim)在`/usr/lib/systemd/system/`目录下创建一个名为`nginx.service`的文件,并添加以下内容(注意:需要根据实际安装路径调整`ExecStart`等命令的路径): ``` [Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target ``` 这里假设Nginx的安装路径是`/usr/local/nginx`,如果您的安装路径不同,请修改为对应的路径。 2. **重新加载systemd配置** 执行命令: ```bash sudo systemctl daemon-reload ``` 3. **设置开机启动** 执行命令: ```bash sudo systemctl enable nginx ``` 4. **启动Nginx服务** 执行命令: ```bash sudo systemctl start nginx ``` 5. **检查服务状态** 执行命令: ```bash sudo systemctl status nginx ``` ### 步骤(针对Windows系统): 根据引用[5],在Windows下可以通过`nginx-service.exe`将Nginx注册为服务。 1. **下载nginx Windows版本** 注意:源码安装通常是在Linux下,但如果在Windows下源码安装,可能需要使用Cygwin等环境。通常我们直接使用Windows预编译版本。这里假设用户已经安装了Nginx的Windows版本。 2. **使用nginx-service.exe** 在Nginx的安装目录下,以管理员身份运行命令提示符,执行: ``` .\nginx-service.exe install ``` 3. **启动服务** 安装后,可以在服务管理器中启动Nginx服务,并设置自动启动。 ### 注意事项: - 在Linux下,确保创建的服务文件中的路径正确,特别是Nginx可执行文件的路径。 - 在Linux下,如果编译安装时指定了其他路径,请相应地修改`ExecStart`、`ExecReload`、`ExecStop`的路径。 - 在Linux下,还需要确保Nginx配置文件路径正确(通常在`/usr/local/nginx/conf/nginx.conf`),否则服务可能无法启动。 ### 引用说明: 我们参考了引用[4]中关于创建systemd服务单元文件的方法,以及引用[5]中关于Windows下设置服务的方法。用户可以根据自己的操作系统选择相应的步骤。 ### 相关问题: 根据用户的问题和我们的回答,生成以下相关问题: 1. 如何验证Nginx服务是否成功设置开机自启动? 2. 在Linux系统中,如何配置Nginx服务以支持HTTPS? 3. 在Windows系统中,如何管理Nginx服务(启动、停止、重启)? 4. 源码安装Nginx时,如何自定义安装路径? 5. 如果Nginx服务启动失败,如何进行故障排查? 以上问题可以帮助用户进一步深入学习和解决可能遇到的问题。</think>### 配置源码安装的Nginx实现开机自启动(Linux系统) #### 步骤1:创建systemd服务文件 在`/usr/lib/systemd/system/`目录下创建`nginx.service`文件: ```bash sudo vim /usr/lib/systemd/system/nginx.service ``` 文件内容如下(需根据实际路径调整): ```ini [Unit] Description=nginx service After=network.target # 确保在网络启动后运行[^4] [Service] Type=forking # 修改为你的nginx实际安装路径 ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true Restart=on-failure [Install] WantedBy=multi-user.target # 指定启动级别[^4] ``` #### 步骤2:重新加载systemd配置 ```bash sudo systemctl daemon-reload ``` #### 步骤3:启用开机自启动 ```bash sudo systemctl enable nginx ``` 成功提示:`Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service` #### 步骤4:验证服务状态 ```bash # 启动服务 sudo systemctl start nginx # 检查状态 sudo systemctl status nginx ``` 正常状态显示:`Active: active (running)` #### 步骤5:测试重启生效 ```bash sudo reboot # 重启后检查nginx是否自动运行 ps aux | grep nginx ``` #### 关键配置说明 | 配置项 | 作用说明 | |----------------|-------------------------------------------------------------------------| | **Type=forking** | 声明服务以守护进程方式运行(Nginx默认行为) | | **ExecStart** | 指定nginx二进制文件绝对路径(源码安装通常在`/usr/local/nginx/sbin/`) | | **WantedBy** | 定义服务在哪个系统运行级别启动(`multi-user.target`表示多用户命令行模式)[^4] | #### 常见问题解决 1. **路径错误** 如果出现`Failed to start nginx.service: Unit not found`: ```bash # 确认路径正确性 ls -l /usr/local/nginx/sbin/nginx # 更新服务配置 sudo systemctl daemon-reload ``` 2. **端口冲突** 若80端口被占用,需先停止Apache等服务: ```bash sudo systemctl stop httpd ``` 3. **权限问题** 确保nginx有权限访问web目录: ```bash sudo chown -R www-data:www-data /var/www/html/ ``` > **注意**:源码编译时建议添加`--prefix=/usr/local/nginx`指定安装路径[^3],避免文件分散存放导致服务配置困难。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值