一、前言
在上一篇遠端開發 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/sftpdtarget:~# 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 的那套規則會比較方便一點囉~