如何在 MT7688 開機時自動啟動服務?

學習 SysV 風格的服務啟動腳本設定

Author: simen


一、前言

在前一篇「遠端掛載檔案系統開發 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 的那套規則會比較方便一點囉~