检查Apache Tomcat状态时如何避免等待用户输入?
问题
在bash脚本中,我通过执行以下命令检查新安装的Apache Tomcat状态:
sudo systemctl status tomcat
输出内容如下:
● tomcat.service Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-01-30 16:25:48 UTC; 3min 9s ago Process: 175439 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 175447 (java) Tasks: 30 (limit: 4546) Memory: 253.0M CPU: 9.485s CGroup: /system.slice/tomcat.service └─175447 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.uti> Jan 30 16:25:48 vps-06354c04 systemd[1]: Starting tomcat.service... Jan 30 16:25:48 vps-06354c04 startup.sh[175439]: Tomcat started. Jan 30 16:25:48 vps-06354c04 systemd[1]: Started tomcat.service. Jan 30 16:25:48 vps-06354c04 systemd[1]: /etc/systemd/system/tomcat.service:1: Assignment outside of section. Ignoring. Jan 30 16:25:48 vps-06354c04 systemd[1]: /etc/systemd/system/tomcat.service:2: Assignment outside of section. Ignoring.
这是我期望看到的信息,但输出后systemctl会持续等待用户按键,破坏了我想要实现的自动化流程,请问如何避免该行为?
解决方法
禁用分页器(推荐):
systemctl status默认会启动分页器(如less)展示内容,导致脚本暂停等待输入。添加--no-pager参数即可跳过分页,直接输出完整内容:sudo systemctl --no-pager status tomcat强制绕过分页器:通过管道将输出传递给
cat,或者重定向到文件,也能避免分页器启动:# 直接输出到终端 sudo systemctl status tomcat | cat # 或者保存到日志文件 sudo systemctl status tomcat > tomcat_status.log 2>&1仅检查运行状态:如果脚本只需要判断Tomcat是否运行,不需要完整状态信息,可以使用更高效的命令:
# 静默检查服务是否处于active状态,返回0表示运行中 sudo systemctl is-active --quiet tomcat # 示例判断逻辑 if [ $? -eq 0 ]; then echo "Tomcat 运行正常" else echo "Tomcat 未启动" fi
内容的提问来源于stack exchange,提问作者coterobarros
相关产品推荐
相关产品推荐

