在舊時代是使用update-rc.d
命令來操作的,具體步驟可以查閱網(wǎng)上其他資料剃袍,在這里介紹使用systemctl
命令來更加優(yōu)雅地實現(xiàn)聊替。
0x01 編寫腳本
腳本存放在/etc/init.d
位置下按灶,文件名如 hello
肺孤,記得加上可執(zhí)行權(quán)限眶拉。
sudo vi /etc/init.d/hello
sudo chmod +x /etc/init.d/hello
腳本將由root
用戶自動執(zhí)行千埃,編寫時涉及到文件等一些權(quán)限操作時注意一下就好。
對于腳本的內(nèi)容忆植。放可。。emmm..確實是有點格式要求的朝刊,一開始我直接就擼了一句
echo "hello" >> /home/ubuntu/log
然而并無卵用耀里,正確的姿勢應(yīng)該是這樣的,最簡單的腳本如下:
#!/bin/sh
### BEGIN INIT INFO
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
echo "hello world" >> /home/ubuntu/log
開頭的那幾行注釋坞古,一句都必不可少备韧,shell可以換成#!/bin/bash
,也可以是其他的都行痪枫。但必須有指定腳本所使用的shell织堂。注釋完后就是自己寫的腳本內(nèi)容了,我這里只是隨便hello了一下奶陈。
Default-Start易阳、 Default-Stop 是指腳本在哪個runlevel被執(zhí)行,以上的2345是最常見的運行等級吃粒,一般腳本都這樣寫就行了潦俺。
詳情點我看Linux標(biāo)準(zhǔn)
0x02 設(shè)置腳本開機自啟動
這里就可以優(yōu)雅地使用systemctl
命令了,一句話搞定:
sudo systemctl enable hello
如果腳本里那幾行注釋沒有缺少的話徐勃,是不會有任何報錯的事示。
如果出現(xiàn)
update-rc.d: error: XXX Default-Start contains no runlevels, aborting.
意味著,腳本里缺少了運行級別的說明僻肖,并不知道什么時候啟動肖爵。
如果沒有指定shell,腳本可能無法成功執(zhí)行臀脏。
0x03 Good Luck
sudo reboot
重啟幾次看看腳本執(zhí)行成功了沒有吧~~~每一次重啟劝堪,那個log文件都會多一句hello world
。
0x04 取消腳本開機自啟動
sudo systemctl disable hello
0x05 調(diào)整啟動順序
有些程序需要先有網(wǎng)絡(luò)才能順利啟動揉稚,可以采用官方的例子秒啦,調(diào)整啟動順序:
# Required-Start: $local_fs $network $remote_fs
就是在有網(wǎng)、本地文件系統(tǒng)搀玖、遠(yuǎn)程文件系統(tǒng)都就緒情況下再啟動本服務(wù)余境。
### BEGIN INIT INFO
# Provides: lsb-ourdb
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop OurDB
# Description: OurDB is a very fast and reliable database
# engine used for illustrating init scripts
### END INIT INFO
Linux就是這么簡單優(yōu)雅~???