在Ubuntu14.04 /16.04 系统上,其用initd管理系统,之前也写的一篇文章《在Linux中利用Service命令添加系统服务及开机自启动》,介绍如何在 rc.local 脚本中开启启动自己编写的脚本、程序或者服务等。而现在Ubuntu18.04不再使用initd管理系统,改用systemd。下面介绍一种方法,通过下列简单设置后,可以使rc.local重新发挥作用。
initd
rc.local
systemd
systemd 默认会读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接 /lib/systemd/system/ 下的文件。 一般系统安装完 /lib/systemd/system/ 下会有 rc-local.service 文件,即我们需要的配置文件。该文件里面有写到 rc.local 的启动顺序和行为。 我们可以看到,其中还有类似reboot.target 一类的*.target文件,用于指定什么时候启动 我们自己自定的软件。
/etc/systemd/system
/lib/systemd/system/
rc-local.service
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 ...
现在介绍如何在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/ 目录下:
/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文件,赋可执行权限:
/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:
reboot
test.log
到此为止,和以前一样的 rc.local 就完成了!