Ubuntu 16.04 以后的版本不再支持 update-rc.d 方式添加开机自启脚本,只能使用 systemctrl 命令进行添加。
下面介绍三种添加开机自启脚本的方法,所测试的系统为 Ubuntu 20.04
使用 rc-local.service
rc-local.service 是系统自带的一个开机自启服务,但是在 ubuntu 20.04 上,该服务默认没有开启。
1. 修改rc-local.service
在终端输入: sudo vim /lib/systemd/system/rc-local.service
在文件的最后面添加 [Install] 段的内容,
2. 创建 /etc/rc.local
Ubuntu 20.04 默认不存在 /etc/rc.local,需要自己创建,
在该文件中添加脚本内容,即开机脚本需要实现的功能,这里只是简单地实现了向某一个文件里填充数据功能。
3. 修改 /etc/rc.local 权限
脚本要想运行,还需要设置脚本的可执行权限,使用 sudo chmod 777 /etc/rc.local 或 sudo chmod +x /etc/rc.local 修改该文件的权限。
4. 启动 rc-local.service
输入 sudo systemctl enable rc-local.service 或 sudo systemctl enable rc-local 使能 rc-local 服务,实际上就是在 /etc/systemd/system/ 目录下创建了一个软链接。
5. 检查服务状态
使用 sudo systemctl status rc-local.service 查看 rc-local 服务的状态, 显示 loaded 和 enabled。
6. 重启验证
使用 gnome-session-properties
这是 Ubuntu 自带的命令,可以在用户登录时自动执行某个程序,在终端输入 gnome-session-properties :
添加一个新的启动程序,选中一个已经编写好的脚本,完成添加。
该脚本的内容如下:
分别向普通用户的文件和系统目录下的文件写数据,
由于这个自启脚本是普通用户设置的,所以无法修改系统级的文件(需要 root 权限)。
这种方法只能设置当前用户的自启脚本,即在当前用户登录后才会执行。
自定义开机自启服务
除了系统自带的 rc-local.service,我们也可以自定义一些服务,用来开机自启,方法如下:
1. 创建 service 文件
新建一个 .service 文件,推荐放在 /lib/systemd/system/ 或 /etc/systemd/system/ 目录下,也可以像我一样,放在任意位置,只不过在打开文件时可能不会出现高亮和彩色字体。下面是我的 service 文件内容,仅供参考,我的文件命名为 :MyService.service
这里做个简单的解释(仅供参考):
Description 是 service 文件的描述,随便填写 After 表示该服务的依赖关系,看其他人都写这个,我也写了。。 ExecStart 表示服务要启动的程序(或脚本) WantedBy 指的是表示该服务所属 targe,multi-user.targe 表示多用户命令行状态
2. 编写服务对应的程序
服务对应的程序即开机要运行的脚本程序,下面是我的测试脚本,向指定文件写入指定数据。
3. 启动服务
使用 systemctl enable /home/test/MyService.service 启动服务
(如果.service 文件不在 /lib/systemd/system/ 或 /etc/systemd/system/ 目录下,则需要填服务文件的绝对地址)
这个操作和上面的 rc-local 服务相同,它会在 /etc/systemd/system/ 等目录下创建 .service 文件的软链接。
此时查看该服务文件的状态,显示已载入(loaded),但是未激活,这是正常的(暂时不知道为什么,能用就行)。
这里的服务文件就不用填绝对路径,因为它已经被添加到了系统服务管理中,而且填绝对地址反而会报错,后面用到的命令同理。
4. 开始服务
systemctl start MyService.service 可以单次运行服务程序,enable 是启动服务,服务对应的脚本在(下次)开机后才会执行,而使用 start,就能立刻执行服务程序。
查看服务状态,比刚才多了一些内容,可以断定服务程序应该执行成功了,查看对应的文件,发现有了对应的数据,说明服务程序的确成功运行了。
5. 重启验证
删除刚才生成的测试文件,重启系统,开机后依然会自动生成指定文件及数据,测试成功:
|