群晖 命令行启动容器 群晖开机启动脚本_配置文件



前几天给公司新装了一台双路2080Ti主机作为我们计算的服务器 【双路RTX 2080Ti】机器学习工作站配置清单及拆箱装机(多图,初创公司福利,程序猿的最爱) - 摩金的文章 - 知乎) 因为使用的是现在最新的稳定版Ubuntu Server 18.04,发现以前开机自启的方法失效了,Ubuntu 18 相比以往的几个版本改动较大,不再使用 initd管理系统,而是使用 systemd,要像以前使用rc.local需要做一些修改。 查阅网上的一些教程发现没有正常启动,最后发现是缺少一些启动命令。
注:下文所使用编辑器是Vim,如果需要使用其他编辑器请自行更换命令中的vim
如果有排版不清等问题欢迎前往我的博客阅读:


ubuntu 18.04 server 开机自动启动脚本 svn ngrok 自动启动 rc.localblog.djinguo.com

群晖 命令行启动容器 群晖开机启动脚本_群晖 命令行启动容器_02


修改rc.local.service

systemd 默认读取 /etc/systemd/system 下的文件,该目录下的文件会链接/lib/systemd/system/下的文件。

执行 ls /lib/systemd/system 你可以看到有很多启动脚本,其中就有我们需要的 rc.local.service

想要深入了解Linux的 init进程和 systemd可以参考下面的博客: Systemd 入门教程

首先修改rc.local.service


sudo vim /lib/systemd/system/rc.local.service


在最后加入[Install]内容:


[Install]
WantedBy=multi-user.target
Alias=rc-local.service


修改完成后的文件如下:


[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
Alias=rc-local.service


通过网上资料了解到

一般正常的启动文件主要分成三部分

[Unit] 段: 启动顺序与依赖关系; [Service] 段: 启动行为,如何启动,启动类型; [Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动;

可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段。

创建rc.local脚本

注意到 Ubuntu 18.04 默认没有/etc/rc.local这个文件,需要自己创建:


sudo vim /etc/rc.local


向其中写入:


#!/bin/bash

svnserve -d -r /home/svn/repository/
/home/ngrok -log=/home/ngrok.log -config=/home/ngrok.cfg start ssh
# 这里还可以加入其它想要自启的命令

echo "this is a test" > /usr/local/text.log


可以看到,第一行是表明这是一个bash文件;

中间两行是我们的自启命令,这里是自动启动SVN和ngrok(和我们平时的启动命令一样);

最后是一个测试输出日志(可以省略),开机后打开/usr/local/text.log就知道有没有成功自启。

创建软链接

前面我们说 systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接


ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/


systemctl 启动 问题研究并解决

之前按照相关教程没有顺利自启,在论坛中找到一个命令使用后成功,可能是将服务告知系统自启的命令。


systemctl enable rc-local


后来又发现:

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。 systemctl enable命令用于在上面两个目录之间,建立符号链接关系。


sudo systemctl enable rc-local
# 等同于
sudo ln -s '/usr/lib/systemd/system/rc-local' '/etc/systemd/system/multi-user.target.wants/rc-local'


如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。

与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。


sudo systemctl disable rc-local


所以说之前问题可能出现在上一步软链接创建失败,或者说光创建链接未激活开机启动。

到此,执行reboot命令重新启动主机,发现相关服务已经成功启动了。

参考链接

ubuntu 18.04 - server版 开机启动脚本

ubuntu 18.04 下如何增加开机启动的命令??? RC local 不管用。。。

Systemd 入门教程:命令篇