【问题标题】:Can I execute a shell script when restarting (starting) apache webserver重新启动(启动)apache网络服务器时我可以执行shell脚本吗
【发布时间】:2012-01-20 14:14:59
【问题描述】:
我有一个带有一些缓存后端的应用程序,我想在网络服务器重新启动时清除缓存。
是否有 apache 配置指令或任何其他方式在网络服务器(重新)启动时执行 shell 脚本?
谢谢,
菲尔
添加一些更多信息,正如一些答案已经提出的那样:
- 基础系统是基于ofc linux的,在这种情况下:CentOs
- 遗憾的是,正如其中一个 cmets 所指出的那样,修改启动脚本不是选项,因为它不是相应 RPM 包中的配置文件,因此被更新所取代。另外我认为修改启动脚本通常是一件坏事
- 我明白了,实际上将“重新启动网络服务器”和“清除我的应用程序缓存”这两个链接并不完全应该捆绑在一起。我会考虑其他替代方案
- 我的情况如下:我可以定义虚拟主机配置的样子,但我无法定义其余服务器配置的样子。
- 该应用程序实际上是基于 PHP 的(并在 symfony 框架上运行)。 Symfony 将很多东西从它在静态配置文件中找到的东西预编译到动态 php 文件中。我们通过 RPM 部署我们的应用程序,在部署之后,实际上已经启动了 web 服务器重启,所以我认为将缓存清理与它联系起来可能是有意义的。但是我觉得在得到大家的反馈之后,看起来还是把缓存清理过程放到安装过程本身比较好。
【问题讨论】:
标签:
apache
shell
webserver
restart
【解决方案1】:
您在这里没有提供很多细节,因此很难给出具体答案,但我建议您最好的选择是编写一个脚本来处理重新启动 apache 并清除缓存。它看起来像这样:
#!/bin/sh
# restart apache
/etc/init.d/httpd graceful
# whatever needs to be done to clear cache
rm -rf /my/cache/dir
Ramy 建议修改 Apache 的系统启动脚本——这是个坏主意!如果并且当您在服务器上更新 Apache 时,您的更改很可能会丢失。
Dirk 认为您正在尝试做的事情可能是错误的,我认为他是对的。您还没有告诉我们您正在运行什么平台,但我可以想到一些需要同时重新启动网络服务器和清除缓存的情况。
【解决方案2】:
您可以在 /etc/init.d/httpd 中修改 Apache Web 服务器的启动脚本,并在其中编写自己的语法。
chattr +i /etc/init.d/httpd
【解决方案3】:
如果您对服务器有(root)访问权限,您可以通过 shell 脚本来执行此操作,但我会考虑依赖 apache 重新启动是否是缓存管理的最佳方式。