作为 CentOS 7 配置脚本的一部分,我需要有一个一行执行以下操作。不幸的是,我不知道如何实现这一目标。
- 如果 httpd 正在运行,则停止它
- 如果 httpd 没有运行,则检查 httpd 是否已安装并启动它
- 理想情况下,结果会记录到 /log/httpd/ 中和/&主机名/日志/httpd/
有人能帮忙吗?
答案1
在 CentOS7 中,您有 systemctl 几乎可以为您完成大部分工作。如果 Apache 是通过标准包安装的,那么这应该可以开箱即用:
echo -n $(date +"%s %F %T"): \
if systemctl is-active httpd; then \
systemctl stop httpd && echo "httpd stopped"; \
elif systemctl enable httpd; then \
systemctl start httpd && echo "httpd started"; \
else \
echo "httpd not installed"; false;\
fi 2>&1 || echo "Failure: $?" | \
tee -a /var/log/httpd/status.log /some/other/location/log/httpd/status.log
为了清楚起见,我将其分成几行。要将其折叠为一行,请删除 \ 和换行符。您可以为日志记录添加更多详细信息。
答案2
这是我的在线留言:
( if service httpd status; then echo 'stop'; service httpd stop; else echo 'check installed'; if ! rpm -qa | grep -q '^httpd-'; then echo 'install'; yum -y install httpd; fi; echo 'start'; service httpd start; fi ) &> /tmp/temp.log; cat /tmp/temp.log >> /log/httpd/some.log; cat /tmp/temp.log >> /&hostname/log/httpd/another.log; rm /tmp/temp.log