使用 MT7688 上 SysV 風格的開機啟動服務

一、前言

在上一篇遠端開發 MT7688 上的 Node.js 專案中,我在「三、讓 MT7688 開機之後,自動啟動 sftp 服務」介紹了在 /etc/init.d 中準備一支 sftpd 指令稿來啟動 sftp-server。然後在 /etc/rc.d 中準備了啟動服務的規則檔 S99sftpd。
  我沒有寫對應的 Kxxsftpd,所以當我要重開機時需要在 terminal 下 reboot -f 命令來強制重新開機。因為我覺得這樣好煩,就想說寫一 K99sftpd 規則檔好了。然後我發現,mt7688 已經有寫好通用的服務啟動指令稿,實在很佛心~ 以下就來看看怎麼利用它來完成 SysV 風格的開機啟動服務吧!

二、步驟

2.1 在 /etc/init.d 新增檔案 sftpd

(如果你已經有這支檔, 就修改它吧!)
target:~# touch /etc/init.d/sftpd
target:~# vim /etc/init.d/sftpd
...
target:~# chmod a+x /etc/init.d/sftpd








sftpd 檔案內容如下
#!/bin/sh /etc/rc.common

START=99
STOP=99
USE_PROCD=1

start_service() {
 procd_open_instance
 procd_set_param command "/usr/libexec/sftp-server -d /"
 procd_set_param respawn
 procd_close_instance
}

service_triggers()
{
 procd_add_reload_trigger "sftpd"
}

/etc/rc.common 正是通用型的服務載入指令稿,我還未細細研究 。不過略可以知重點在於準備 start_service() 這個函式方塊,並且使用 procd_set_param 將 command 參數設定為你要執行的 "命令字串" 即可,也就是上列程式碼的 "/usr/libexec/sftp-server -d /" 部分,將這部分換成你要執行的命令字串即可。而 procd_add_reload_trigger 後 "sftpd" 是此檔案的名稱,也換成你自己的檔名,相信這是在設定自動重新載入服務相關的指令稿。

一開頭的 START=99 以及 STOP=99 則是對應到等一下我們要在 /etc/rc.d 中加入規則檔的順序號 SxxYYY 與 KxxYYY。

2.2 在 /etc/rc.d 新增兩個軟連結 S99sftpd 與 K99sftpd

這兩支軟連結都指向 /etc/init.d/sftpd

target:~# ln -s /etc/init.d/sftpd /etc/rc.d/S99sftpd
target:~# ln -s /etc/init.d/sftpd /etc/rc.d/K99sftpd



2.3 重開機

重開機後,再於 host 上試試看 sshfs 掛載功能。然後在 target 上直接執行 reboot,現在 MT7688 應該就會乖乖地重新開機囉~

三、結語

如果你想在開機時執行某些指令或執行指令稿,你也可以寫在 /etc/rc.local 這支檔案內哦!
那如果你想執行的東西有幾樣,而且又有順序性(或順序相依性),我想還是用 SysV 的那套規則會比較方便一點囉~

 
 
 
simen

An enthusiastic engineer with a passion for learning. After completing my academic journey, I worked as an engineer in Hsinchu Science Park. Later, I ventured into academia to teach at a university. However, I have now returned to the industry as an engineer, again.

Post a Comment (0)
Previous Post Next Post