如何创建shell脚本来检查Ubuntu中systemd服务的状态?

问题描述 投票:0回答:2

我有 5 个服务在

ubuntu
中运行。我每天都会检查它们的状态,因此必须为所有 5 项服务输入
sudo systemctl status <>
命令。所以我想创建一个简单的脚本
service_status.sh
来列出状态。如下所示:

sudo systemctl status receiver0.service
sleep 2
sudo systemctl status receiver1.service
sleep 2
sudo systemctl status receiver2.service
sleep 2
sudo systemctl status sender.service
sleep 2
sudo systemctl status health.service

这运行良好并显示服务的状态,但问题是如果这些服务中的任何一个处于非活动状态或重新启动,则脚本会冻结它们并且不显示其余服务的状态。例如,如果

receiver2.service
由于某种原因没有运行:

● receiver2.service -  receiver 2
   Loaded: loaded (/etc/systemd/system/receiver2.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Wed 2021-05-19 07:15:34 EAT; 25s ago
  Process: 5333 ExecStart=/usr/bin/python3 /home/andrew/Documents/source/receiver_
 Main PID: 5333 (code=exited, status=1/FAILURE)
lines 1-5/5 (END)

脚本在此停止,并且不显示

sender.service
health.service
的状态。我可以在脚本中进行哪些更改,以便它不会冻结并显示其他服务的状态?

ubuntu service systemd
2个回答
0
投票

使用 is-active 并检查命令的返回码。


0
投票

要检查活动服务:

systemctl is-active --quiet <service-name> && echo "<service-name> active"

要检查非活动服务:

! $(systemctl is-active --quiet <service-name>) && echo "<service-name> inactive"
© www.soinside.com 2019 - 2024. All rights reserved.