和往常一样,但凡是在linux中看到什么稀奇古怪,新式猎奇,都会调出man页面一探究竟。因为第一次接触systemctl命令,所以我就运行了:
mansystemctl
我发现在unitcommands(单元命令)下,有一个start命令;而在unitfilecommands下,还有一个enable命令。突然我顿时慌了,感觉这几年的英文都白学了。原来这两个词的意思不一样啊。
吻住自己之后,仔细打量了一番两者的区别:
start:
enable:
洋洋洒洒600多字英文,看完我更慌了。好在认识的单词不多,拣我们认识的唠唠。
大概意思是,enable命令运行的时候,后面需要跟上单元文件。如果你就给个单元名,那么enable命令会自动去各种单元文件的路径中搜索,寻找匹配单元名的文件。或者呢,你也可以给出指向单元文件的完整路径,这样就省得enable命令去一个个找了。不过如果这个路径不走寻常路,不在常规的单元文件路径当中,还会专门创建一个表征链接,熟悉windows的朋友可以把它当作快捷方式。把这个奇葩单元文件连接到单元配置路径中去。确保比如start命令需要这个文件的时候,能够找着。
enable命令还会根据单元文件的[install]段落的内容,在特定路径下,生成表征链接(类似windows的快捷方式文件),其中就有用于自动启动的路径。如果在自动启动的路径下,创建表征链接,这样系统开机启动后,回到这个路径来,挨个启动表征链接就完事了。
好奇心促使我又看了一眼nginx和docker的单元文件的内容,重点就是[install]段落。
分别运行命令:
systemctlcatnginxsystemctlcatdocker
nginx和docker的[install]段落内容一模一样:
这里有个新名词叫multi-user.target,.target其实也是单元文件,后续文章将进一步展开。大体上,.target就类似我们去快餐店点的套餐,一个套餐里面,有汉堡、可乐、土豆泥、沙拉、玩具等等。那么nginx和docker就相当于是汉堡和可乐。ubuntu启动以后,默认点了一份multi-user.target套餐,店小二一听,好嘞,这位爷。等小的我给您上菜啊。挨个启动nginx和docker。这样就实现了开机自动启动服务的操作。
说了这么多,还是没有提到enable(启用)和start(启动)的区别啊。
别急,下面专门有一段是说:别把enable和start搞混。看来和我一样水平的人不少啊。
enable和start是互不相关的。一个单元可以启动不启用;也可以启用不启动。之前我们提到,enable会在不同的特定路径下,创建表征链接。nginx和docker默认都是在自动启动的路径下创建表征链接,所以对应于它们的enable行为就是开机自动启动。除了自动启动之外,还有用于其它目的的特殊路径。比如在插入u盘时,启动服务的路径。这样enable的行为就是在插入u盘时,启动某个单元。
而start命令,针对服务单元的话,就只是为服务生成一个守护进程。
所以如果你希望ubuntu在自动启动的时候,就能够启动nginx的话,可以运行
sudosystemctlenablenginx
但是如果nginx现在并没有在运行,即使运行上面这个命令,也不会启动nginx,除非重启电脑。想要开机自动启动nginx,同时现在就需要nginx运行的话,可以:
sudosystemctlenablenginx–now
原文标题:enable的用法及例句,启用(enable)与启动(start)的区别,如若转载,请注明出处:https://www.dnheimuer.com/wenda/14488.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「东宁黑木耳网」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。