前几天给公司新装了一台双路2080Ti主机作为我们计算的服务器
【双路RTX 2080Ti】机器学习工作站配置清单及拆箱装机(多图,初创公司福利,程序猿的最爱) - 摩金的文章 - 知乎)
因为使用的是现在最新的稳定版Ubuntu Server 18.04,发现以前开机自启的方法失效了,Ubuntu 18 相比以往的几个版本改动较大,不再使用initd
管理系统,而是使用systemd
,要像以前使用rc.local需要做一些修改。
查阅网上的一些教程发现没有正常启动,最后发现是缺少一些启动命令。
注:下文所使用编辑器是Vim,如果需要使用其他编辑器请自行更换命令中的vim
修改rc.local.service
systemd 默认读取 /etc/systemd/system 下的文件,该目录下的文件会链接/lib/systemd/system/下的文件。
执行 ls /lib/systemd/system
你可以看到有很多启动脚本,其中就有我们需要的 rc.local.service
想要深入了解Linux的
init
进程和systemd
可以参考下面的博客:
Systemd 入门教程
首先修改rc.local.service
1 | sudo vim /lib/systemd/system/rc.local.service |
在最后加入[Install]内容:
1 | [Install] |
修改完成后的文件如下:
1 | [Unit] |
通过网上资料了解到
一般正常的启动文件主要分成三部分
[Unit] 段: 启动顺序与依赖关系;
[Service] 段: 启动行为,如何启动,启动类型;
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动;
可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段。
创建rc.local脚本
注意到 Ubuntu 18.04 默认没有/etc/rc.local这个文件,需要自己创建:
1 | sudo vim /etc/rc.local |
向其中写入:
1 | !/bin/bash |
可以看到,第一行是表明这是一个bash文件;
中间两行是我们的自启命令,这里是自动启动SVN和ngrok(和我们平时的启动命令一样);
最后是一个测试输出日志(可以省略),开机后打开/usr/local/text.log就知道有没有成功自启。
创建软链接
前面我们说 systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接
1 | ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/ |
systemctl 启动 问题研究解决
之前按照相关教程没有顺利自启,在论坛中找到一个命令使用后成功,可能是将服务告知系统自启的命令。
1 | systemctl enable rc-local |
后来又发现:
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。
systemctl enable命令用于在上面两个目录之间,建立符号链接关系。
1 | sudo systemctl enable rc-local |
如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。
与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
1 | sudo systemctl disable rc-local |
所以说之前问题可能出现在上一步软链接创建失败,或者说光创建链接未激活开机启动。
到此,执行reboot
命令重新启动主机,发现相关服务已经成功启动了。