此前的幾年時間里一直的在用mosquitto和apache apollo玩mqtt服務。對於業余玩玩,還是有些玩不動的地方。qq群里總有人提到emq,剛開始覺得用erlang編寫的,以為玩不轉。昨天在雲主機裝了個,感覺確實不錯。自帶控制台,速度比apollo快多了。自帶權限和acl模塊,並且可以與mysql一起玩。我是下載的壓縮包,直接運行的,卻發現不帶自動運行腳本。下面記錄下解決的過程。
先說一下,我是用centos7,看官方文檔,貌似其他系統可以自動啟動的。我一開始沒找到emqttd.service這個文件,等我基本解決了問題,通過google找到在github上的一份腳本,似乎還不是用於centos的。
再廢話一點,一開始,我是git源碼編譯的,在編譯過程中,有些需要臨時git下載的源碼總是過不去,導致編譯失敗。
在官網下載了zip文件,解壓后將文件目錄內容移到 /usr/local/emqttd/下面。
依照官網文檔,在該目錄下運行 ./bin/emqttd console,沒有問題。
但是如果你直接運行 /usr/local/emqttd/bin/emqttd 是不會成功的。(記不住是在玩nginx還是igrok的啟動文件時總結的經驗,如果systemctl運行出錯,直接把service文件中的運行語句在控制台直接運行,會出現更詳細的提示。)
要注意的是,提示信息里顯示了相關的參數。在最終的service 文件用要用到的。至於重啟有沒有實現類似nginx重啟的效果,還沒仔細看文檔,不知文檔里有沒有說明。
嘗試 在 start 前 加 -s,倒是貌似運行。ps顯示,只有一個進程。打開網頁管理,看到登陸界面,但是無法成功登陸。就算是把目錄下的etc里的配置文件拷貝到 系統的 /etc中,也沒用。
印象中還發現了一個現象, systemctl status emqttd.service 提示 類似進程不存在的提示。
Dec 03 23:04:28 sh01.htsky.cn systemd[1]: Starting Share local port(s) with emqttd...
Dec 03 23:04:33 sh01.htsky.cn systemd[1]: Started Share local port(s) with emqttd.
Dec 03 23:04:33 sh01.htsky.cn emqttd[23765]: emqttd 2.3.0 is started successfully!
Dec 03 23:05:20 sh01.htsky.cn systemd[1]: Stopping Share local port(s) with emqttd...
Dec 03 23:05:20 sh01.htsky.cn killall[24177]: emqttd: no process found
Dec 03 23:05:20 sh01.htsky.cn killall[24177]: stop: no process found
Dec 03 23:05:20 sh01.htsky.cn systemd[1]: emqttd.service: control process exited, code=exited status=1
Dec 03 23:05:22 sh01.htsky.cn systemd[1]: Stopped Share local port(s) with emqttd.
Dec 03 23:05:22 sh01.htsky.cn systemd[1]: Unit emqttd.service entered failed state.
Dec 03 23:05:22 sh01.htsky.cn systemd[1]: emqttd.service failed.
[root@sh01 /]# ps -aux | grep emqttd
root 19610 0.0 0.0 11576 340 ? S 16:12 0:00 /usr/src/emqttd/erts-9.0/bin/epmd -daemon
root 21633 0.0 0.0 9036 668 pts/0 R+ 22:43 0:00 grep --color=auto emqttd
最后腳本是這樣的,添加了home解決問題。這樣以后,配置文件也不用搬到 /etc下面了。(其他有些程序可能要指定啟動時的配置文件)
Environment=HOME=/usr/local/emqttd
ExecStart=/usr/local/emqttd/bin/emqttd start
ExecReload=/usr/local/emqttd/bin/emqttd reboot
ExecStop=/usr/bin/killall emqttd stop
結果顯示的進程也多了。
[root@sh01 ~]# systemctl status emqttd.service
* emqttd.service - Share local port(s) with emqttd
Loaded: loaded (/etc/systemd/system/emqttd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2017-12-04 12:35:30 CST; 3h 4min ago
Process: 731 ExecStart=/usr/local/emqttd/bin/emqttd start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/emqttd.service
|-3163 /usr/local/emqttd/erts-9.0/bin/epmd -daemon
|-3278 /usr/local/emqttd/erts-9.0/bin/run_erl -daemon /tmp/root_erl_pipes/emq@127.0.0.1/...
|-3293 /usr/local/emqttd/erts-9.0/bin/beam.smp -W w -e 256000 -Q 65536 -P 256000 -A 32 -...
|-4084 erl_child_setup 1048576
|-4494 sh -s disksup
|-4506 /usr/local/emqttd/lib/os_mon-2.4.2/priv/bin/memsup
`-4507 /usr/local/emqttd/lib/os_mon-2.4.2/priv/bin/cpu_sup
Dec 04 12:35:15 sh01.htsky.cn systemd[1]: Starting Share local port(s) with emqttd...
Dec 04 12:35:30 sh01.htsky.cn systemd[1]: Started Share local port(s) with emqttd.
Dec 04 12:35:30 sh01.htsky.cn emqttd[731]: emqttd 2.3.0 is started successfully!
在摸索的過程中,還發現一些有趣的現象。只要用心,也是一種享受。