在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
就完成了!