Ubuntu14.04 /16.04 系统上,其用initd管理系统,之前也写的一篇文章《在Linux中利用Service命令添加系统服务及开机自启动》,介绍如何在 rc.local 脚本中开启启动自己编写的脚本、程序或者服务等。而现在Ubuntu18.04不再使用initd管理系统,改用systemd。下面介绍一种方法,通过下列简单设置后,可以使rc.local重新发挥作用。

1 机制

systemd 默认会读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接 /lib/systemd/system/ 下的文件。
在这里插入图片描述
一般系统安装完 /lib/systemd/system/ 下会有 rc-local.service 文件,即我们需要的配置文件。该文件里面有写到 rc.local 的启动顺序和行为。
在这里插入图片描述
我们可以看到,其中还有类似reboot.target 一类的*.target文件,用于指定什么时候启动 我们自己自定的软件。

$ ll | grep target

-rw-r--r--  1 root root   919 1月  28  2018 basic.target
drwxr-xr-x  2 root root  4096 5月  18  2018 basic.target.wants/
-rw-r--r--  1 root root   419 1月  28  2018 bluetooth.target
-rw-r--r--  1 root root   465 1月  28  2018 cryptsetup-pre.target
-rw-r--r--  1 root root   412 1月  28  2018 cryptsetup.target
lrwxrwxrwx  1 root root    13 9月  30 23:23 ctrl-alt-del.target -> reboot.target
lrwxrwxrwx  1 root root    16 9月  30 23:23 default.target -> graphical.target
-rw-r--r--  1 root root   471 1月  28  2018 emergency.target
-rw-r--r--  1 root root   541 1月  28  2018 exit.target
-rw-r--r--  1 root root   480 1月  28  2018 final.target
...

2 方法

现在介绍如何在Ubuntu18.04启用 rc.local 设置开机启动脚本。

1) rc-local.service 文件虽然里面有写到 rc.local 的启动顺序和行为,但是没用写加载这个 rc-local.service ,编译该文件:

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

在文件后加上如下内容:

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

2)将 /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/ 目录下:

sudo systemctl enable rc-local.service
#或者
sudo ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

在这里插入图片描述

3)创建/etc/rc.local文件,赋可执行权限:

sudo touch /etc/rc.local
sudo chmod 755 /etc/rc.local 

4)编辑rc.local,添加需要开机启动的任务:

#!/bin/bash
 
echo "test rc " > /var/test.log

5)执行reboot重启系统,然后查看test.log

到此为止,和以前一样的 rc.local 就完成了!

Logo

更多推荐