根据
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 传递,然后可以给出更正确的答案。