我发现的另一个是编辑
update-rc.d
文件夹中的/etc/init.d
文件。推荐的启用/禁用/添加服务的方法是什么?为什么?
请问一个简短的防弹示例,逐步介绍如何在Ubuntu中添加服务以及启用和禁用它?
#1 楼
可以使用GUI(例如startup
应用程序)或终端来启用/禁用某些服务。对于终端,您有多种选择。首先,打开一个终端(例如,在破折号中键入“ terminal”,然后将其打开)。然后:
临时启用/禁用服务
要临时停止和启动服务(请勿在将来的启动中启用/禁用它们),可以键入
service SERVICE_NAME [action]
。例如:sudo service apache2 stop
(将Apache服务停止,直到重新启动或再次启动它)。 sudo service apache2 start
(如果之前已停止,则将启动Apache服务。)。service apache2 status
(如果已启用/正在运行,则将告诉您该服务的状态/已禁用/未运行。) sudo service apache2 restart
(将重新启动该服务。更改后最常使用此配置文件。在这种情况下,如果您更改了PHP配置或Apache配置。重新启动将使您不必停止/以2个命令行开头)service apache2
(在这种情况下,由于您没有提及要为该服务执行的ACTION,它将为您显示该特定服务可用的所有选项。)这方面取决于服务,例如,对于MySQL,它只会提到它缺少一个参数。对于其他服务(例如网络服务),它会提到所有可用选项的一小部分。SYSTEMD
从Ubuntu 15.04开始,不赞成使用Upstart,而建议使用系统化。使用Systemd管理服务,我们可以执行以下操作(通过
systemctl action SERVICE
模式):systemctl start SERVICE
-使用它来启动服务。重新启动后不能持续systemctl stop SERVICE
-使用它来停止服务。重新启动后无法持续systemctl restart SERVICE
-使用它重新启动服务systemctl reload SERVICE
-如果服务支持,它将重新加载与其相关的配置文件,而不会中断任何进程正在使用该服务。systemctl status SERVICE
-显示服务的状态。告知服务当前是否正在运行。systemctl enable SERVICE
-在下次重新启动或下次启动事件时打开服务。它在重新启动后仍然存在。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(自15.04起不推荐使用)
如果要使用正式的Upstart方式(请注意,目前并非所有服务都已转换为Upstart),则可以使用以下命令: br />
status SERVICE
-这将告诉我们转换后的服务是否正在运行。请注意,不推荐使用start
,stop
,status
和restart
。它还会告诉我们服务是否尚未转换为新贵:转换后的服务通常会输出当前状态(正在启动,正在运行,正在停止...)和进程ID。未转换的服务会给出有关未知作业的错误。
某些快捷方式仅适用于上面的
service
命令,但不适用于下面的命令,除非它们已100%转换为新贵服务:开始-
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
会将MySQL服务置于
manual
模式。如果您不希望这样做,之后只需执行sudo rm /etc/init/mysql.override
,然后重新启动该服务即可再次自动启动。当然要启用服务,最常见的方法是安装它。如果您安装Apache,Nginx,MySQL或其他,则它们将在安装完成后自动启动,并在每次启动计算机时启动。如上所述,禁用将使用服务
manual
。评论
您是否需要向每个命令添加.service? systemctl mongod的状态很好。
– Dan Dascalescu
16 Sep 10'3在3:36
@DanDascalescu不,你不,但我要在那里澄清一下。
–路易斯·阿尔瓦拉多(Luis Alvarado)
16-09-10 22:19
是否应将.override文件放置在/etc/init.d/中,即放置服务的位置?
–欧比湾-PallavJha
16 Dec 9'在10:13
为什么在15.04中弃用了Upstart?在ubuntu 16.04或更高版本中启动/重新启动时运行脚本的正确方法是什么?
– Kamalakannan J
17年1月6日在20:18
感谢您的全面答复。系统化的命令集可在Ubuntu 18.04上使用。
– Doktor J
18-09-24在14:23
#2 楼
当前,在Ubuntu,SysV,Upstart和systemd中,实际上有三种方法可以将软件作为服务启动。服务在这里定义为由系统在后台运行的程序,而不是由用户直接启动和运行的程序。传统的启动方式Linux中的服务是在
/etc/init.d
中放置一个脚本,然后使用update-rc.d
命令(或在基于RedHat的发行版中,chkconfig
)启用或禁用它。在/etc/rc#.d
中,控制启动服务的顺序。如果运行ls /etc/rc2.d
,您会看到命令将以文件名K##xxxx
终止服务,并以文件名S##xxxx
开头。 ##
中的S##xxxx
表示服务xxxx
的“开始订单”。相反,##
中的K##xxxx
意味着服务xxxx
的终止命令。SysV的一个主要问题是,在引导系统时,所有操作都必须串行进行,一件又一件地完成,从而使系统启动时间真的很慢。试图并行化这一点,但是它们是偶然的并且难以充分利用。这是创建Upstart的主要原因。
Upstart
Upstart使用
/etc/init
中的作业定义文件来定义应启动什么事件的服务。因此,在系统启动时,新贵将处理各种事件,然后可以并行启动多个服务。这样,它们可以充分利用系统的资源,例如,在运行另一个受CPU限制的服务时,或者在网络等待分配动态IP地址的同时启动磁盘绑定的服务。通过运行
ls /etc/init/*.conf
,您可以查看所有暴发户作业文件。禁用它!并非所有服务都已转换为新贵。在过去几个月中,在Canonical的服务器团队工作时,我已经处理了许多转换后的作业文件,最棒的部分是它使人们可以摆脱所有脚本“魔术”,而只需将其放此处几乎没有几个命令可以确切地定义如何启动服务,仅此而已。但是目前,只有很少的传统网络服务(例如squid和samba)已被转换。
服务是基于新贵的吗?服务是基于新贵的,您可以运行status命令:
status servicename
如果是新贵的工作,它将显示以下内容:
$ status statd
statd start/running, process 942
但是,如果不是这样,则会看到更多类似的内容:
$ status apache2
status: Unknown job: apache2
在这种情况下,
apache2
尚未转换为暴发户。因此,要禁用apache2
,您只需运行sudo update-rc.d apache2 disable
sudo service apache2 stop
在upstart中禁用服务(作业)
upstart作业定义没有
update-rc.d
命令。要禁用作业,您需要直接编辑作业文件以将其禁用。有两种方法可以执行此操作。如果您仍然希望能够手动启动它,则需要注释掉
start on
条件。假设您要安装samba,但没有使其自动启动。这是作业文件(以自然形式表示):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
要禁用samba,您只需在“
#
”前面放置一个start on local-filesystems
。请注意,尽管它不会在启动时启动,但您仍然需要使用sudo service smbd stop
来停止它,但是,如果您不想让samba启动,我建议实际上删除软件包。但是,如果要安装但无法启动,则还可以执行以下操作:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
使用启动/停止节禁用服务(自11.04开始)
从版本11.04开始的upstart版本开始,有一个新关键字禁用
start on
和stop on
节:manual
。因此,从11.04开始禁用服务的另一种方法是:echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
您可以创建一个
override
文件来禁用服务,而无需完全编辑作业定义,方法是:只需将manual
关键字放入其中。评论
看起来11.04也已覆盖。因此,最好使用echo手册>> /etc/init/
–MestreLion
2011年5月27日下午3:09
update-rc.d真正重要的是
– Timofey
2012年12月2日,9:26
与原始问题发布者标记为最终答案的答案相比,似乎更容易理解原始主题。谢谢! :)
–亨宁
14年4月6日在11:11
在我的情况下,文件/etc/init/ssh.conf存在,但是状态ssh和状态sshd都说“未知作业”。这个答案似乎没有解决这种可能性?
– Brian Z
2015年6月7日,下午3:33
status ssh也给我提供“未知工作”,但是service ssh status对我有用
– ptim
16 Mar 27 '16 at 0:57
#3 楼
sysv-rc-conf尝试使用sysv-rc-conf
sudo apt-get install sysv-rc-conf
并开始管理服务,执行
sudo sysv-rc-conf
将弹出这样的交互式窗口
您可以使用下一页和
Ctrl+n
进一步浏览页面对于上一页。您可以通过在所需的运行级别上选择Ctrl+p
来启用和禁用服务。Jobs-Admin
另一种选择是通过
安装的Jobs-Admin。
sudo apt-get install jobs-admin
还提供了类似这样的GUI
要显示更多作业,您必须从其菜单中选中显示受保护的作业。
chkconfig
第三个选项是chkconfig,
sudo apt-get install chkconfig
它可以通过CLI
SPACE
使用,显示列表我们还可以使用
chkconfig
查看系统服务可以使用
chkconfig <service> on
服务打开服务可以使用
chkconfig <service> off
关闭,我们甚至可以使用带有适当标题的适当init脚本添加自己的服务。 br />
update-rc.d
另外一个选项可以在这里参考update-rc.d,这里简要解释。
请注意,对于Ubuntu Server 12.04,使用
chkconfig –list
而不是chkconfig。评论
在ubuntu服务器上:软件包chkconfig不可用,但由另一个软件包引用。
–出售
13年4月22日在13:16
@pwned您可以自由编辑和发布有关服务器版本的更新信息。谢谢。
– atenz
13-4-26在14:53
我按照您的建议做了,现在可以进行同行评审了。
–出售
13年4月26日在16:44
jobs-admin不允许更改工作(Ubuntu 14.04),而是生成崩溃报告;-)
– Sadi
2014年5月20日下午14:38
sysv-rc-conf不适合与upstart或systemd一起使用,它专利仅适用于旧的System 5 rc系统,近十年来它一直不是Ubuntu Linux上的默认系统。 Debian Bug#791689承认了这一点,并质疑为什么它没有被标记为与systemd冲突。
– JdeBP
2015年11月17日在9:41
#4 楼
对于那些通过ssh运行Ubuntu的人,我认为最好的选择是rcconf
-基于文本的程序:sudo apt-get install rcconf
sudo rcconf
导航使用Tab键和箭头键,请按空格键以启用/禁用。更改在重新启动后是持久的。
从此博文中借用的屏幕截图也显示了
sysv-rc-conf
-类似的工具,该工具也可以让您设置运行级别。 (对于那些恰好关心运行级别以希望更改它们的人:) rcconf不适用于新贵(
/etc/init/*
中列出的服务),仅适用于传统机制(ls -l /etc/init.d/*
-并非符号链接的服务。)幸运的是,在ssh插入服务器时,许多相关的服务(Apache,Tomcat,mdadm,boinc-client ...)都没有被转移到新贵了。
评论
这仍然适用于新贵吗?
– oKtosiTe
2011年1月6日在20:18
抱歉不行。但这在我想更改的所有情况下都有效-新贵的工作似乎主要是我永远不想禁用的事情-硬件时钟,日志守护程序,网络等(至少在Ubuntu服务器上)。但是有一点要注意(我不是:),我已经更新了帖子。
– j-g-faustus
2011年1月6日在20:59
不幸的是,mysql被转换为新贵。那就是我仅在执行某些项目时使用的服务。
–MestreLion
2011年5月27日,下午3:12
Ubuntu 12.04上的rcconf有一个错误,阻止该程序启动。要解决此问题,您需要安装对话框包。
– devius
2012年6月2日22:08
自从编写了此答案以来,update-rc.d已更改,并且某些不赞成使用的功能已删除。 Debian错误#727735指出rcconf并未更改为匹配。而且,rcconf也不能与systemd一起使用,因此在过去十年中不适用于Ubuntu Linux的任何默认初始化系统。
– JdeBP
15年11月17日在9:35
#5 楼
我发现有一个GUI工具,类似于BUM,但与Upstart兼容:Jobs-Admin
sudo apt-get install jobs-admin
评论
但这太简单了,不允许更改“受保护的作业”(那是jobbs?Apple有Jobs,操作系统有守护进程!)
– kakaz
13年12月19日在20:06
我什至不允许更改“不受保护的作业”(Ubuntu 14.04),而是生成崩溃报告;-)
– Sadi
2014年5月20日14:37
#6 楼
编辑现有的新贵配置文件(如上所述)不是一个好主意。更新的软件包可以提供更新的配置,而您不得不一遍又一遍地重复更改。简短示例:假设我们有一个名为“ foobar”的服务,那么将有一个名为man 5 init
的文件,其配置为新贵。现在,您不想删除该文件,也不想对其进行修改,但是您既不想运行该服务,又不想?因此,在其旁边放置一个替代文件:/etc/init/foobar.conf
,其中包含(可选的带有说明的标头和)标头行,而不是/etc/init/foobar.override
/ start on
行,而是放置一个带有单词的行:stop on
。这样,您可以告诉upstart基本上使用manual
,但是可以覆盖启动定义,以仅在手动执行时(通过本示例中的foobar.conf
)启动该服务。#7 楼
还有一个启动管理器。要安装:
sudo apt-get install bum
更多信息:http://www.marzocca.net/linux/bum.html
评论
不要忘记检查“高级”按钮。
–not2qubit
16年4月4日在2:10
#8 楼
我使用Stacer。它还显示服务和流程。完整的GUI系统工具箱。
https://github.com/oguzhaninan/Stacer
#9 楼
对我来说,最简单的方法是仅使用CLI,这是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
一如既往;您可以参考联机帮助页。
评论
有关联网,请访问:askubuntu.com/questions/230698/…这对于那些被Fedora 12困住并落在这里的人很有帮助。如果您正在寻找linkrot chkconfig。
请注意,此处仍然缺少Ubuntu 14.04的答案。
@MarcelloNuccio:从Ubuntu 15.04开始,不推荐使用Upstart,而推荐使用Systemd。
自动启动程序在自动启动清单或多个位置的* .service文件以及init.d或crontab中进行配置。请参阅:unix.stackexchange.com/a/525845/43233