ubuntu第八講:自啟動管理
上一篇講了如何用cpolar軟體實作内網穿透,通過簡單設定實作了外網遠端登入及觀看電影功能。今天講一下如何一開機就自動運作cpolar這個軟體。
ubuntu管理開機自啟動軟體的方法有以下幾種:配置rc.local檔案,系統自帶的軟體啟動管理器,systemd服務。
先說結論:
1.rc.local檔案在ubuntu18.04版之後就沒有了,但是在其他linux系統(包括部分群晖)下還是可以用,這裡稍微了解一下就行。
2.系統自帶的軟體啟動管理器可以設定軟體或者腳本在開機時自啟動,但是需要先登入系統,也就是說如果隻是開機但是未登入系統的話軟體是不會運作的。
3.systemd服務。如果想在系統登入前就運作程式,需要利用systemd服務。這是本文重點内容。
rc.local檔案
rc.local檔案本質上是一個shell腳本。将需要執行的指令在rc.local檔案内編輯好,然後賦予該檔案具有可執行權限(執行sudo chmod+x /etc/rc.local )即可。
基本格式為所有需要執行的指令必須在exit 0 之前。一個檔案内可以執行多個腳本,例如
/home/username/test1.sh &
/home/username/test2.sh &
/home/username/test3.sh &
......
exit 0
知識點:
該檔案位于/etc/rc.local #注意!在ubuntu18.04版本以後沒有這個檔案!打開/lib/systemd/rc-local.service可以看到關于rc.local的資訊,說明這個檔案的功能還是存在的,隻是新版的ubuntu已經不推薦使用。
與rc.local配套使用的還有一個檔案夾unin.d,目錄位于/etc/init.d/,這個檔案夾内都是shell腳本檔案。另外還有多個檔案夾rc*.d,目錄位于/etc/rc*.d/,*号表示從0-6,另外還有一個S(大寫)。這裡面都是一些軟連結檔案,大多指向init.d檔案夾。檔案夾名稱0-6表示什麼意思呢?
0-Halt,關機模式
1-Single,單使用者模式
2-Full multi-user with display manager(GUI)多使用者模式
3-Full multi-user with display manager(GUI)
4-Full multi-user with display manager(GUI)
5-Full multi-user with display manager(GUI)
6-Reboot,重新開機
運作runlevel #檢視目前系統運作級别,本例為N5。那麼主要的配置檔案在/etc/rc5.d/目錄下。
系統自帶的軟體啟動管理器
ubuntu自帶軟體啟動管理工具。圖形化界面,對初學者來說比較友好。單擊啟動軟體,出現啟動應用程式首選項設定視窗。
可以把需要開機自啟動的程式添加到清單内。
舉例:添加cpolar自啟動指令
名稱:cpolar #自由輸入,自己能了解就行。
指令:/home/rex/下載下傳/cpolar/cpolar http 8096 #指定到自己電腦上cpolar檔案存放的位置,并且添加http 8096的參數。
注釋:cpolar開啟http8096端口 #自由輸入,自己能了解就行。
這樣設定好之後,開機就會自動運作了。
缺點:隻能設定一條指令,要麼開通http,要麼開通tcp。
通過腳本一鍵啟動http和tcp隧道
建立cpolarinstall.sh腳本檔案
添加到軟體啟動器中,也就是說啟動器可以直接運作腳本檔案。
這樣開機的時候,就能同時開通http和tcp端口了。
但是還是有缺點:如果電腦處于未登入狀态,這條指令是不會執行的。這樣就産生了死循環,我都沒有啟動tcp端口,怎麼能登入電腦呢!不行,還得找辦法。
systemd服務
Systemd是在 Linux 系統上最新的守護程序管理器,基本用法如下:
$ sudo systemctl enable [service_name] #開機啟動某項服務
$ sudo systemctl disable [service_name] #關閉某項服務
$ sudo systemctl status [service_name] #檢視某項服務的狀态
$ sudo systemctl start [service_name] #啟動某項服務
systemctl enable指令會将服務單元添加到/etc/systemd/system/multi-user.target.wants目錄下。當系統啟動時會自動執行,并且會依照依賴關系按順序啟動服務。當所有服務執行完畢,系統啟動過程也就完成了。
知識點:
ubuntu16.10版以後不再使用init.d管理系統,改用systemd,包括用systemctl指令來替代service和chkconfig的功能。
執行個體示範:設定cpolar在系統登入前自啟動
第一步:本例我把cpolar程式存放在/opt/cpolar/bin/中(注:一般自己安裝的軟體都可以放在opt這個檔案夾内。)
第二步:在/etc/systemd/system/檔案夾内建立cpolar.service配置檔案,如下圖所示。(我是直接複制另一個service檔案,然後改一下名稱,這樣service檔案的基本格式就有了。也可以在别的位置建立檔案,然後拷貝過去,例如$ cp -i cpolar.service /etc/systemd/system/)
運作sudo nano /etc/systemd/system/cpolar.service編輯cpolar.service檔案,具體内容如下所示。
[Unit]
Description=cpolar Service #描述,請自由發揮,自己能看懂就行
[Service]
WorkingDirectory=/opt/cpolar #指定軟體目錄
ExecStart=/opt/cpolar/bin/cpolar start-all #軟體路徑及運作參數。cpolar start-all指啟動所有端口,詳見cpolar.yml配置檔案。
RestartForceExitStatus=3
User=rex #指定“誰”來運作軟體
[Install]
WantedBy=multi-user.target #固定語句,不用修改。
知識點:
service是有固定格式的,分為[Unit] [Service] [Install]三個部分。
第三步:生成指向/etc/systemd/system/multi-user.target.wants/的軟連接配接
$ ln -s /etc/systemd/system/cpolar.service /etc/systemd/system/multi-user.target.wants/
所有設定完成,是不是很簡單!重新開機電腦看看運作情況。
(本文結束)
導讀指南
白學ubuntu系列,目前已經整理了十章内容,我會逐一釋出。
ubuntu第一講:系統安裝及初體驗
ubuntu第二講:常用軟體推薦與安裝
ubuntu第三講:遠端連接配接
ubuntu第四講:檔案共享
ubuntu第五講:搭建影音伺服器
ubuntu第六講:硬體監測
ubuntu第七講:内網穿透
ubuntu第八講:自啟動管理
ubuntu第九講:service服務及腳本
ubuntu第十講:SSH遠端連接配接