确定服务是否正在运行

确定服务是否正在运行

根据

如何解读“service --status-all”的结果

service --status-all

使用 列出正在运行的服务[+]。另一方面,你可以使用

service <name> status

apache-htcacheclean现在两个命令都列出了我的服务

不同。

✗ ✗ sudo service apache-htcacheclean status
● apache-htcacheclean.service - Disk Cache Cleaning Daemon for Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache-htcacheclean.service; disabled; vendor preset: enabled)
    Active: inactive (dead)

✗ ✗ sudo service --status-all
  [+] acpid
  [-] alsa-utils
  [-] anacron
  [+] apache-htcacheclean
  [-] apache2
  [+] apparmor

为什么会这样?现在什么是正确的,或者我忽略了什么?

答案1

解决方案

译自:https://forum.ubuntuusers.de/topic/laufender-service-ja-oder-nein/

这是一个很好的例子,说明了为什么不应该使用service 自从systemd(因此systemctl)引入的命令。

您可以查看service命令的源代码(/usr/sbin/service)。使用该--status-all选项,此脚本将更改为 /etc/init.d并使用先前定义的环境和参数状态执行位于那里的每个可执行文件。从此调用中,将保存返回值和输出。

[+]如果执行程序的返回值为0并且记录的输出长度不为零,则服务会收到标记。在此之前,会测试执行文件的输出是否包含字符串usage:(忽略大小写),以便使用标记[?]放置。对于所有其他情况,结果为[-]

现在举个例子:

/etc/init.d$ ls
acpid                console-setup.sh  grub-common        lvm2           mdadm-waitidle  plymouth-log    ssh
apache2              cron              hwclock.sh         lvm2-lvmetad   networking      procps          udev
apache-htcacheclean  cryptdisks        irqbalance         lvm2-lvmpolld  nfs-common      rpcbind         ufw
apparmor             cryptdisks-early  iscsid             lxcfs          open-iscsi      rsync           uuidd
apport               dbus              keyboard-setup.sh  lxd            open-vm-tools   rsyslog
atd                  ebtables          kmod               mdadm          plymouth        screen-cleanup

/etc/init.d$ ./apache-htcacheclean status
 * apache-htcacheclean is not running

/etc/init.d$ echo $?
0

如果您直接向服务询问服务的状态,它将通过 systemctl 传递,然后可以给出更正确的答案。

相关内容