emqttd的启动脚本
此前的几年时间里一直的在用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!
在摸索的过程中,还发现一些有趣的现象。只要用心,也是一种享受。