我找到的第一种方法是使用"update-rc.d"命令将新的服务添加到启动项中,该命令针对"/etc/init.d"文件夹及其内容。
另一种方法是编辑"/etc/init"文件夹中的".conf"文件。
那么,推荐的启用/禁用/添加服务的方式是什么?为什么?
您能否给出一个简短而可靠的逐步示例,说明如何在Ubuntu中添加、启用和禁用服务?
有一些服务可以通过图形用户界面(如启动
应用程序)或终端进行启用/禁用。
对于终端,您有几个选项。首先,打开一个终端(例如,在搜索栏中键入“终端”并打开它)。然后:
要临时停止和启动服务(不会在未来的启动中启用/禁用它们),您可以输入service SERVICE_NAME [action]
。例如:
sudo service apache2 stop
: 会停止Apache服务,直到重新启动或再次启动为止。sudo service apache2 start
: 会启动Apache服务,假设之前已经停止。service apache2 status
: 会告诉您服务的状态,无论是启用/运行还是禁用/未运行。sudo service apache2 restart
: 会重启服务。这通常在您更改配置文件时使用,例如更改PHP配置或Apache配置。重启将避免您需要使用两个命令行来停止/启动。service apache2
: 在这种情况下,由于您没有提及要执行的操作,它将显示该特定服务的所有可用选项。这方面因服务而异,例如,对于MySQL,它只会提到缺少一个参数。对于其他服务,如网络服务,它将提到所有可用选项的简短列表。systemctl action SERVICE
模式):
sudo systemctl start SERVICE
: 用它来启动一个服务。重启后不会保持启动状态。sudo systemctl stop SERVICE
: 用它来停止一个服务。重启后不会保持停止状态。sudo systemctl restart SERVICE
: 用它来重新启动一个服务。sudo systemctl reload SERVICE
: 如果该服务支持,它将重新加载与其相关的配置文件,而不会中断正在使用该服务的任何进程。systemctl status SERVICE
: 显示一个服务的状态。告诉你一个服务当前是否正在运行。sudo systemctl enable SERVICE
: 在下次重启或下次启动事件时打开该服务。重启后仍然保持启用状态。sudo systemctl disable SERVICE
: 在下次重启或下次停止事件时关闭该服务。重启后仍然保持禁用状态。systemctl is-enabled SERVICE
: 检查一个服务当前是否配置为在下次重启时启动。systemctl is-active SERVICE
: 检查一个服务当前是否处于活动状态。systemctl show SERVICE
: 显示关于该服务的所有信息。sudo systemctl mask SERVICE
: 通过将其链接到/dev/null
来完全禁用一个服务;你无法手动启动该服务或启用该服务。sudo systemctl unmask SERVICE
: 移除与/dev/null
的链接,并恢复启用和手动启动该服务的能力。如果我们想要按照官方的Upstart方式(请注意,目前并非所有服务都已转换为Upstart)进行操作,我们可以使用以下命令:
status SERVICE
- 这将告诉我们一个已转换的服务是否正在运行。请注意,这种方法已被弃用,取而代之的是start
、stop
、status
和restart
命令。它还会告诉我们某个服务是否尚未转换为Upstart:
一个已转换的服务通常会输出当前状态(启动中、运行中、停止中...)和进程ID。一个未转换的服务会显示一个关于未知作业的错误信息。
某些快捷方式只能与上述service
命令一起使用,而不能与下面的命令一起使用,除非它们已完全转换为Upstart服务:
sudo start mysql
:启动sudo stop mysql
:停止sudo restart mysql
:重启sudo status smbd
:状态echo manual | sudo tee /etc/init/SERVICE.override
在下一次启动时,使用manual
选项将阻止Upstart自动加载该服务。以.override
结尾的任何服务都将优先于原始服务文件。之后,您只能手动启动该服务。如果您不想这样做,只需删除.override
即可。
例如:
echo manual | sudo tee /etc/init/mysql.override
sudo rm /etc/init/mysql.override
重新启动服务以使其再次自动启动。当然,要启用服务,最常见的方法是安装它。如果您安装了Apache、Nginx、MySQL或其他服务,它们会在完成安装后自动启动,并且每次计算机启动时都会启动。如上所述,禁用将使用服务手动
。
.service
吗?systemctl mongod status
已经可以正常工作了。 - Dan Dascalescusystemd
后放弃了upstart
。这里有Mark Shuttleworth的一些关于此事的废话。 - Hydraxan14/etc/init/FOO.override
不起作用。有效的方法是chmod -x /etc/init.d/FOO
。 - Mikhail T.systemd
命令集非常好用。 - Doktor Jchkconfig
,例如chkconfig service on
可以启用服务。 - Hi-Angelsudo snap services
来查看它们的列表。 - Flimm并非所有服务都已转换为Upstart。在过去几个月里,我在Canonical的服务器团队工作期间,我曾处理过许多转换后的作业文件,最好的部分是它允许我们摆脱所有的脚本“魔法”,只需在其中插入一些命令来准确定义如何启动服务,而不多余任何其他内容。但目前,只有少数传统网络服务,如和,已经完成转换。
要确定一个服务是否基于Upstart,您可以运行status命令:
status servicename
$ status statd
statd start/running, process 942
$ status apache2
status: Unknown job: apache2
apache2
没有被转换为upstart。因此,要禁用apache2
,只需运行以下命令sudo update-rc.d apache2 disable
sudo service apache2 stop
Upstart作业定义没有update-rc.d
命令。要禁用该作业,您需要直接编辑作业文件以禁用它。有两种方法可以做到这一点。
如果您仍然希望能够手动启动它,则需要注释掉start on
条件。假设您想安装samba,但不希望它自动启动。以下是作业文件(在natty中):
description "SMB/CIFS File Server"
author "Steve Langasek <steve.langasek@ubuntu.com>"
start on local-filesystems
stop on runlevel [!2345]
respawn
pre-start script
RUN_MODE="daemons"
[ -r /etc/default/samba ] && . /etc/default/samba
[ "$RUN_MODE" = inetd ] && { stop; exit 0; }
install -o root -g root -m 755 -d /var/run/samba
end script
exec smbd -F
start on local-filesystems
"前面加上一个#
。请注意,虽然它不会在启动时重新启动,但你仍然需要停止它这一次。sudo service smbd stop
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
从将在11.04版本中出现的upstart版本开始,有一个新的关键字可以禁用start on
和stop on
stanza: manual
。因此,从11.04版本开始,禁用服务的另一种方法是执行以下操作:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
override
文件来禁用一个服务,而无需编辑作业定义,只需在文件中加入manual
关键字即可。echo manual >> /etc/init/<service>.override
,因为这样可以保留原始的.conf文件。不管怎样,如此基本的启用/禁用功能竟然花了3年时间开发,而且没有图形界面,真是遗憾。 - MestreLion*.override
文件会附加到 *.conf
文件中以计算结果,但是这一点在任何地方都没有记录。另一种解释是 *.override
会替换 *.conf
文件的内容,但是这样做可能会破坏 *.conf
文件中的 exec
和其他相关内容。 - Mikko Rantalainen/etc/init/ssh.conf
是存在的,但是status ssh
和status sshd
都显示为"Unknown job"。这个回答似乎没有解决这种可能性? - Brian Zstatus ssh
给我返回 'Unknown job',但是 service ssh status
对我来说是有效的。 - ptimsudo snap services
来查看它们的列表。 - Flimm尝试使用sysv-rc-conf
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf
Ctrl+n
来浏览下一页,使用 Ctrl+p
来浏览上一页。你可以通过在所需的运行级别上选择 SPACE
来启用和禁用服务。
另一种选择是通过安装 Jobs-Admin 来实现。
sudo apt-get install jobs-admin
sudo apt-get install chkconfig
可以通过命令行界面CLI的chkconfig
来使用,它会显示开启/关闭任务的列表。
同时,我们还可以使用chkconfig –list
来查看系统服务。
可以使用以下方式开启服务:
chkconfig <service> on
服务可以通过关闭来停用
chkconfig <service> off
chkconfig --add <service>
update-rc.d
代替了chkconfig。
sudo apt-get install rcconf
sudo rcconf
sysv-rc-conf
- 一种类似的工具,也可以让您设置运行级别。(对于那些对运行级别足够关心以希望更改它们的人来说 :))/etc/init/*
中的服务)一起使用,只能与传统机制(ls -l /etc/init.d/*
- 那些不是符号链接的服务)一起使用。sudo ln -s /bin/whiptail /usr/bin/whiptail
来解决那个错误。 - Mahnupdate-rc.d
已经发生了变化,并且删除了一些已弃用的功能。Debian bug #727735指出rcconf没有进行相应的更改。而且,rcconf也不能与systemd一起使用,因此在过去十年里,它都不适用于Ubuntu Linux的默认初始化系统。 - JdeBPsudo apt-get install jobs-admin
update-rc.d
命令。sudo update-rc.d <daemon|service> <enable|disable>
update-rc.d spamassassin enable
sudo service <daemon|service> <start|stop|restart|reload|force-reload|status>
sudo service spamassassin status
spamassassin.service - Perl-based spam filter using text analysis
Loaded: loaded (/lib/systemd/system/spamassassin.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 13:04:10 SAST; 4s ago
Process: 1928 ExecStart=/usr/sbin/spamd -d --pidfile=/var/run/spamd.pid $OPTIONS (code=exited, status=0/SUCCES
Main PID: 1949 (spamd)
Tasks: 3 (limit: 2361)
CGroup: /system.slice/spamassassin.service
├─1949 /usr/bin/perl -T -w /usr/sbin/spamd -d --pidfile=/var/run/spamd.pid --create-prefs --max-child
├─1951 spamd child
└─1952 spamd child` etc etc
update-rc.d
可以做更多的事情,而不仅仅是上面显示的基本功能:
usage: update-rc.d [-f] <basename> remove
update-rc.d [-f] <basename> defaults
update-rc.d [-f] <basename> defaults-disabled
update-rc.d <basename> disable|enable [S|2|3|4|5]
-f: force
chkconfig
。 - Bleeding Fingersautostart
清单或*.service
文件中进行配置,还可以在init.d
或crontab
中进行配置。请参阅:https://unix.stackexchange.com/a/525845/43233 - Noam Manos