是否有命令列出启动时运行的服务?我想这将涉及解析/etc/init.d/和各种/etc/rc.*目录。

#1 楼

您可以简单地使用initctl list shell命令列出/etc/init的内容,而不是建议的dbus-send命令。

评论


在Ubuntu 18.04中可以使用吗?我收到“ initctl:找不到命令”(以bash格式)

– Sanjay Manohar
19年8月15日在19:12



在Ubuntu 19.10上找不到initctl列表

–人头马Hosseinkhan Boucher
19/12/18在11:55

@RémyHosseinkhanBoucher有关Ubuntu的最新版本askubuntu.com/a/1167921/988056

–AppyGG
20 Mar 3 '20 at 8:41

#2 楼

快速答案是:这取决于您的init系统。长答案是:对于当前版本的Ubuntu,您可能混合使用Upstart和SystemV。 15.04“ Vivid Vervet”(以及RHEL / CentOS 7等其他Linux发行版)之后的较新版本的Ubuntu正在迁移使用SystemD。

Upstart


Upstart文档

要列出所有服务:

sudo initctl list


要列出所有Upstart服务并对其运行initctl show-config,这种单线可能会有所帮助:

sudo initctl list | awk '{ print  }' | xargs -n1 initctl show-config


System V


SysV运行级别文档

列出所有服务:

sudo service --status-all


OR:

# for init scripts:
ls /etc/init.d/

# for runlevel symlinks:
ls /etc/rc*.d/


SystemD


用于新手用户的SystemD
FedoraProject SystemD文档
RHEL 7:使用SystemD管理服务
RedHat:SystemD概述

要列出所有服务:

sudo systemctl list-unit-files --type=service


OR:

ls /lib/systemd/system/*.service /etc/systemd/system/*.service


评论


这应该是公认的答案。

– sjas
16 Dec 6'在13:02

service --status-all不会显示是否已启用服务以在启动时启动,至少不能在Ubuntu 16上启动。它显示了服务当前是否正在运行。

–通配符
19年4月18日在21:35

我必须sudo service --status-all才能显示所有服务。当我仅在非root帐户上运行service --status-all时,有一些隐藏了。

–充实
19年5月23日在16:30

@Phlucious:感谢您提及。我以为众所周知,这些命令通常以root身份运行(systemctl,service,initctl ...),因为它们通常被视为系统管理命令。

– TrinitronX
19年6月11日在19:56

service --status-all此命令也可以在我的debian框中使用

–阿伦
20'八月14'4:53



#3 楼

/etc/init.d/etc/rc.*目录已被“ upstart”初始化工具所取代。尽管这些目录中的脚本将按预期执行,但是用于初始化init的新方法由/etc/init/中的文件定义。

您可以通过dbus查询upstart来列出所有upstart作业:

dbus-send --print-reply --system --dest=com.ubuntu.Upstart \
        /com/ubuntu/Upstart com.ubuntu.Upstart0_6.GetAllJobs


您可能必须更改0_6才能反映新贵的版本。此命令适用于我的透明安装。

评论


@Eric H:能否将下面的答案设置为正确的-initctl列表比此dbus命令好得多。我想在这里留下这个答案供参考(而不是完全删除)。

–杰里米·科尔(Jeremy Kerr)
2011-2-24在4:48

#4 楼

如果您想用图形化的方式来表示服务和启动所需的时间,请尝试:

apt-get install bootchart


#5 楼

请使用initctl show-config <servicename>来真正了解何时/是否在引导过程中启动服务的详细信息。

例如:

$ initctl show-config myservice
myservice
  start on runlevel [2345]
  stop on runlevel [!2345]


或者对于NFS4 idmap-daemon:

$ initctl show-config idmapd
idmapd
  start on (local-filesystems or mounting TYPE=nfs4)
  stop on runlevel [06]


chkconfig仅在基于RedHat的系统imho上更可取。

评论


这是正确的答案。我不知道为什么所有错误和不完整的答案都受到如此强烈的反对。

–塞林
16年8月8日在15:35

这对于使用SysV的人不起作用,我同意这是一个不错的答案,但还不完整。

–加布里埃尔·内托(Gabriel Netto)
16 Dec 12'在12:59

#6 楼

对于Ubuntu 18.04,请使用:

systemctl list-units --type=service

而不是:

initctl

从Ubuntu 16.04起,initctlsystemd代替。
https://www.linuxtricks.fr/wiki/systemd-les-commandes-essentielles(FR_fr)

(如果可以帮助@ sanjay-manohar)

#7 楼

在12.04上,我们可以使用:

sudo apt-get install chkconfig
chkconfig --list


,但在12.10中将其删除。

示例输出:

acpi-support              0:off  1:off  2:on   3:on   4:on   5:on   6:off
acpid                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
apparmor                  0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on


评论


在Ubuntu中不起作用。 packages.ubuntu.com/…

– A.B.
15年4月24日在7:21

@ A.B。谢谢你让我知道!如今,拒绝投票的人很少发表评论:它需要勇气,并允许我学习。更新了适用的版本。

– Ciro Santilli郝海东冠状病六四事件法轮功
15年4月24日在7:58

精确地:packages.ubuntu.com/precise/chkconfig

– Ciro Santilli郝海东冠状病六四事件法轮功
15年4月24日在7:59

#8 楼

除了以下系统服务和脚本:


/etc/init.d//lib/systemd/system//etc/systemd/system/


也可能还有AutoStart应用程序,例如:

find / -name "*autostart*"

ls -1 "/etc/xdg/autostart" "/home/$USER/.config/autostart" "/usr/share/gdm/autostart"  "/usr/share/gnome/autostart"


#9 楼

使用gawk:

ls -l /etc/rc*.d/* | gawk 'match(
$ ls -l /etc/rc*.d/* | gawk 'match(q4312078q, /rc([0-6S]).d.*\/(.*)$/, a) {l[a[2]]=l[a[2]]a[1]","}; END{for(v in l){print v,substr(l[v],1,length(l[v])-1)}}' | egrep README
README 0,1,2,3,4,5,6,S
, /rc([0-6S]).d.*\/(.*)$/, a) {l[a[2]]=l[a[2]]a[1]","}; END{for(v in l){print v,substr(l[v],1,length(l[v])-1)}}'


示例输出:

q4312078q