关于supervisor管理redis可以参考我写的这篇:https://blog.youkuaiyun.com/coding_zhang/article/details/86521205
问题背景:由于项目以apache2作为server,项目依赖的service较多,一个一个管理不太方便。
解决办法:通过supervisor来集中管理
具体过程:
1.安装步骤
ubuntu16.04环境下:
sudo apt-get install supervisor
sudo apt-get install apache2
sudo apt-get install apache2-dev
2.修改相应的配置文件
suprvisor的配置文件目录:/etc/supervisor/supervisord.conf
apache2配置文件目录:/etc/apache2/apache2.conf
3. 踩坑过程
从现在开始是一个踩坑的过程,最后会给出最终的解决办法
!踩坑开始
第一次配置参考的链接:
http://jackmorrison.me/2015/02/23/controlling-apache-with-supervisor.html
http://supervisord.org/subprocess.html
具体的配置过程:
cd /etc/supervisor/conf.d/
vim apache.conf
[program:apache]
command=apache2ctl -c "ErrorLog /dev/stdout" -DFOREGROUND
autostart=true
autorestart=true
startretries=1
startsecs=1
redirect_stderr=true
stderr_logfile=/var/log/myapache.err.log
stdout_logfile=/var/log/myapache.out.log
killasgroup=true
stopasgroup=true
配置好之后,通过sudo supervisorctl -c /etc/supervisor/supervisord.conf进入管理
先后执行reread,update进行配置文件的重新加载。
执行status命令之后
显示错误:
apache FATAL Exited too quickly (process log may have details)
redis RUNNING pid 13121, uptime 3:12:28
查找问题的过程:
由于supervisor管理界面给出的信息比较少,于是决定去查看supervisor的日志文件。
vim /var/log/supervisor/supervisord.log
查看到错误日志如下:
通过查看日志也没有获取到过多的错误信息。通过查询apache2 spawned error找到下面一篇博客:
https://blog.youkuaiyun.com/sinat_21302587/article/details/76836283
通过sudo supervisorctl tail apache stdout动态的输出supervisor启动进程时候的输出。
报错:
apache: ERROR (no log file)
可以看出是没有日志文件引起的错误。
然后有通过exec /usr/sbin/apache2 -DFOREGROUND 命令去前台启动。
出现的错误信息如下:
于是有通过apache2 ${APACHE_LOCK_DIR}错误定位到:
https://blog.youkuaiyun.com/duanxinpeng/article/details/52818863
从上面这篇博客中可以了解到应该是
/etc/apache2/envvars
这个文件夹引起的,因为apache2服务默认是后台运行,此时会自动的source /etc/apache2/envvars.该文件夹下会对apache2的一些变量进行初始化设置。当我们以前台方式启动apache2的时候并不会执行source这个动作。这样就造成一些初始化变量并没有给赋值。具体变量在/etc/apache2/apache2.conf中也可以看到那些变量会依赖这个文件夹。
!踩坑结束
4. 错误解决办法
知道了具体原因我们就需要去修改配置文件。手动去执行source这个动作让相应的初始化变量去生效。
参考链接:
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/supervisor.html
https://github.com/docker-library/php/issues/97
https://github.com/keopx/docker-apache-php/blob/master/5.6/scripts/apache2-foreground
具体配置文件内容如下:
[program:apache]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
autostart=true
autorestart=true
startretries=1
startsecs=1
redirect_stderr=true
stderr_logfile=/var/log/myapache.err.log
stdout_logfile=/var/log/myapache.out.log
killasgroup=true
stopasgroup=true
最终重新读取supervisor相关配置文件。成功管理apache2服务
如果是通过docker去部署。
参考这篇链接: