登录时通知系统服务状态的脚本

登录时通知系统服务状态的脚本

我想要运行一个脚本(bash 或 python),以简单的格式打印用户登录时所有系统服务的状态。

service --status-all

上述命令将它们全部输出到一个列表中,如下所示

[+] servicename
[?] servicename
[-] servicename

当用户登录时,脚本应该提供有关正在运行的服务的人性化消息。

我知道可能有一些实用程序可以做到这一点,但我想了解更多有关脚本的知识以及如何完成一件事。

任何帮助深表感谢。

答案1

如果你想要如下输出:

The following services are running: ntp, rsync, ssh, 

您可以使用awk来转换输出service --status-all

$ service --status-all | awk '/+/{printf "%s", sep " " $NF; sep=","}'
 acpid, alsa-utils, apache-htcacheclean, apache2, apparmor, apport, atd, avahi-daemon, cron, cups-browsed, dbus, grub-common, irqbalance, keyboard-setup, kmod, lightdm, network-manager, networking, ondemand, procps, rc.local, resolvconf, rsyslog, speech-dispatcher, ssh, udev, ufw, urandom, whoopsie

因此你的脚本看起来应该是这样的:

#! /bin/sh
printf "The following services are running: " 
service --status-all | awk '/+/{printf "%s", sep " " $NF; sep=","}'
echo

命令awk很简单:

  • /+/匹配+其中带有 的行。通常,+表示一个或多个前面的表达式。但是, 本身+就表示。如果此模式匹配,+Awk 将运行以下块。{...}
  • printf "%s" sep " " $NF打印变量的内容sep,后跟一个空格,后跟行的最后一个字段(NF是字段数,$x是字段号 x 的内容)。
  • sep一开始是空的,所以要打印的第一个服务前面只有一个空格。现在我设置了sep=",",所以下一行开始,我们就有了一个,
  • 这不会打印换行符,因此我echo在末尾使用一个简单的换行符来打印一个。

现在使用如下方法:为所有用户在 shell 登录时运行脚本在登录时运行脚本。

相关内容