美文网首页我爱编程
Centos 7 编译安装apache 并使用unit文件管理启

Centos 7 编译安装apache 并使用unit文件管理启

作者: 小尛酒窝 | 来源:发表于2018-04-07 10:48 被阅读0次

一、前言

最近学习了systemd的相关特性及unit文件的组成,想尝试在编译安装完apache后,利用systemd管理启动apache服务,以此加深对systemd管理的理解。

二、Centos7 编译安装apache

此前已经写过关于如何在Centos 7上编译安装apache的博客,这里就不作详细介绍,只给相应的操作流程:

[root@localhost tmp]# yum install -y gcc gcc++ zlib zlib-devel expat-devel pcre-devel  #安装相应的环境
[root@localhost tmp]# tar -zxf apr-1.6.3.tar.gz
[root@localhost tmp]# tar -zxf apr-util-1.6.1.tar.gz 
[root@localhost tmp]# tar -zxf httpd-2.4.29.tar.gz
[root@localhost tmp]# # cd apr-1.6.3
[root@localhost apr-1.6.3]# ./configure --prefix=/usr/local/apr  #编译安装apr
[root@localhost apr-1.6.3]# make && make install
[root@localhost apr-1.6.3] cd ../apr-util-1.6.1
[root@localhost apr-util-1.6.1] ./configure --prefix=/usr/loacl/apr-util --with-apr=/usr/local/apr #编译安装apr-util
[root@localhost apr-util-1.6.1]  make && make install
[root@localhost apr-util-1.6.1] cd ../httpd-2.4.29
[root@localhost httpd-2.4.29] ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr/ --with-apr-util=/usr/loacl/apr-util/ #编译安装httpd
[root@localhost httpd-2.4.29] make && make install 

编译安装完后,记得关闭firewalld 和selinux,以免影响输出结果。

三、编辑apache的unit文件

在/usr/lib/systemd/system/目录下新建一个名为httpd.service的unit文件,其内容为:

[Unit]
Description=apache

[Service]
Type=simple #设置service类型为simple
EnvironmentFile=/usr/local/apache/conf/httpd.conf #指定service的环境配置文件
ExecStart=/usr/local/apache/bin/httpd -k start -DFOREGROUND 
ExecReload=/usr/local/apache/bin/httpd -k graceful 
ExecStop=/bin/kill -WINCH ${MAINPID} #此处的${MAINPID}为特殊变量,对应着相应服务的主进程ID

[Install]
WantedBy=multi-user.target

上述内容为我参考使用yum install -y httpd 安装生成的 unit文件所编辑的,其内容详细解析可man一下systemd.unit和systemd.service进行查看。
另外,上述的-DFOREGROUND意味着相应的httpd进程不是作为前台进程运行在系统当中,而且由systemd进程代为管理其输入和输出,但是在进程层面来说,这跟前台进程的运行一样。此处我测试中,试过需要添加-DFOREGROUND才能使用systemctl对httpd服务进行管理启动;也许是因为不加-DFOREGROUND,该服务没办法由systemd管理???(求确认)

除此之外,在设置Type=simple时,我曾设置过notify类型,但是发现在执行了systemc start httpd后,执行会报错:


命令异常

其执行的日志为:


执行报错

httpd服务启动超时,后来经google后(这里得吹一波),有大神解释道:如果我们使用的是默认的httpd配置文件,那必须保证配置文件中包含module_systemd,那个module为获取apache启动成功信息所必须得(我这里检查我自己的配置文件,确实没有相应的module,但是我查了下对应的module好像是apache 2.5版本才有,我使用的是2.4版本,所以这里具体为什么使用notify就会出现超时的原因,目前我也没搞明白,欢迎指点。),如果不想启动对应的module,可以使用simple类型。
贴上相应的地址链接:https://www.apachelounge.com/viewtopic.php?p=28864

四、启动httpd服务并设置自动启动

编辑完成后,记得使用systemctl daemon-reload加载新建或编辑过的unit文件。

随后使用systemctl启动httpd服务:

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - apache
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 六 2018-04-07 10:19:56 CST; 5s ago
  Process: 3369 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 3377 (httpd)
   CGroup: /system.slice/httpd.service
           ├─3377 /usr/local/apache/bin/httpd -k start -DFOREGROUND
           ├─3378 /usr/local/apache/bin/httpd -k start -DFOREGROUND
           ├─3379 /usr/local/apache/bin/httpd -k start -DFOREGROUND
           └─3380 /usr/local/apache/bin/httpd -k start -DFOREGROUND

4月 07 10:19:56 localhost.localdomain systemd[1]: Started apache.
4月 07 10:19:56 localhost.localdomain systemd[1]: Starting apache...
4月 07 10:19:56 localhost.localdomain httpd[3377]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdoma...is message
Hint: Some lines were ellipsized, use -l to show in full.

设置开机自动启动httpd服务:

[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

此时查看相关的httpd服务端口,应该已经启动了:

[root@localhost ~]# netstat -tan 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0     52 192.168.0.188:22        192.168.0.38:50923      ESTABLISHED
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 192.168.0.188:80        192.168.0.38:51271      ESTABLISHED

访问测试下:


访问结果

well done!成功了,至此就成功使用unit文件管理启动apache了。这个systemd的使用目前我也是半知半解,如果有大神发现我写的有误的话,希望指点下。

附带:在Centos 7上使用chkconfig管理启动apache的方法
https://www.jianshu.com/p/f8e4046820d6
l

相关文章

网友评论

    本文标题:Centos 7 编译安装apache 并使用unit文件管理启

    本文链接:https://www.haomeiwen.com/subject/iclehftx.html