源码编译安装Apache开机自启动

本文介绍了在源码安装Apache后如何设置开机自启动的方法,主要涉及Linux系统的启动脚本和运行级别。通过将apachectl复制到/etc/rc.d/init.d并执行chkconfig –add httpd,服务可在启动级别2345自动启动。如果遇到服务启动问题,可进入单用户模式排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当用源码安装完Apache之后无法利用命令设置开机自启动,不过可以把启动命令写在/etc/rc.d/rc.local文件里,下面简单说下怎么设置命令自启动(centos6):

原理

Linux系统系统服务启动脚本放在/etc/rc.d/init.d/目录下,不同的开机模式对应/etc/rc.d/rc0~6.d/不同的目录,这些目录对应不同运行级别init.d目录下脚本启停顺序,这几个目录的命令形式为K(S)+number+serviceName,这些文件链接到service对应脚本存在目录,要想使用service命令启停服务,就要把我们自己的脚本放到/etc/init.d/目录下,而且在脚本第二行加运行级别、描述两行注释。

运行级别:
0 - 关机
1 - 单用户模式
2 - 多用户无网络模式(很少使用)
3 - 完整的多用户终端模式(无图形界面)
4 - 保留
5 - 多用户带GUI模式
6 - 重启

[root@centos6 init]# vi /etc/inittab
id:5:initdefault:
#不要把默认启动级别设置成0或6

操作

如果想将httpd列入系统自动启动的服务,可以直接将上述的apachectl文件拷贝到 /etc/rc.d/init.d 目录中。

cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
在脚本第二行加上如下注释
# chkconfig: 2345 61 39  #在脚本第二行开始添加
# description: Apache #centos6以后版本可加可不加,最好加上
[root@centos6 rc0.d]# chkconfig --add httpd 
[root@centos6 rc0.d]# chkconfig httpd on #默认开启2345运行级别,当然可以通过选项--level num指定运行级别
[root@centos6 rc0.d]# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

注:当执行完chkconfig –add httpd命令后会自动在启动级别2345加上S61httpd,016级别加上K39httpd软连接,这些软连接存放在/etc/rcN.d(N为启动级别)目录下。启动的顺序并不是按照数字大小执行的而是按照ascii码表排序的顺序(数字、大写字母、小写字母)执行,数字只是为了好识别启动顺序,自己创建文件要注意。

运行级文件
每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。

  • 第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。

  • 第二行对服务进行描述,可以用 跨行注释

# chkconfig: 2345 61 39 
# description: Apache
表明这个脚本应该在运行级 2, 3, 4, 5 启动,启动顺序为61,停止顺序为39。先启动的服务比较重要,停止顺序要靠后

当服务启动脚本(开机自启)有问题是会导致系统启动不起来,可以查看系统启动界面,看在哪个服务启动后无法启动,然后进入单用户模式下,找到那个服务禁止自启动,等机器启动后再排查错误。

<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],避免文件分散存放导致服务配置困难。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值