kungfu service启动failed故障原因分析和解决

272 阅读2分钟

本来跑得好好的,隔了这些天再来重新编译一下就挂掉了。

root@VM-12-6-ubuntu:~# systemctl status kungfu
● kungfu.service - Kungfu Master Trading System Daemon
   Loaded: loaded (/opt/kungfu/master/etc/systemd/user/kungfu.service; linked; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2022-05-09 16:33:14 CST; 7min ago
  Process: 7473 ExecStart=/usr/bin/supervisord -c /opt/kungfu/master/etc/supervisor/supervisord.conf (code=exited, status=203/EXEC)

May 09 16:33:14 VM-12-6-ubuntu systemd[1]: Starting Kungfu Master Trading System Daemon...
May 09 16:33:14 VM-12-6-ubuntu systemd[7473]: kungfu.service: Failed to execute command: No such file or directory
May 09 16:33:14 VM-12-6-ubuntu systemd[7473]: kungfu.service: Failed at step EXEC spawning /usr/bin/supervisord: No such file or directory
May 09 16:33:14 VM-12-6-ubuntu systemd[1]: kungfu.service: Control process exited, code=exited status=203
May 09 16:33:14 VM-12-6-ubuntu systemd[1]: kungfu.service: Failed with result 'exit-code'.
May 09 16:33:14 VM-12-6-ubuntu systemd[1]: Failed to start Kungfu Master Trading System Daemon.

如果是代码的问题,为什么我的两个副本编译好的包都不能运行呢。所以我觉得大概率不是代码的问题。

猜想一:因为我在卸载的时候没有关闭kungfu的service导致了死尸残余,然后我执行apt remove的时候kungfu 是running状态导致的。

验证一:错误。使用下面的命令清除掉了failed的kungfu之后重新安装,依旧报错。

systemctl reset-failed kungfu

猜想二:

根据上面的报错supervisord这个东西根本就没有构建起来。 顺着报错的信息,我顺藤摸瓜。使用find命令找到了问题的根源:

验证二:

root@VM-12-6-ubuntu:/#  find / -name supervisord
/usr/local/bin/supervisord

也就是说,程序是在这个路径中找/usr/bin/supervisord,而实际它存在的路径是/usr/local/bin/supervisord

解决办法: 修改源文件中的路径/usr/bin/supervisord,加上local。

具体来说: 就是按照报错改错误的办法。我把这两个文件里的/usr/bin的路径都加上了个/local。 甚至不用我重新编译,问题就解决啦。

我之所以能快速定位到这里的两行代码,是因为vs code的代码全局搜索功能。

截屏2022-05-09 21.57.38.png

截屏2022-05-09 21.54.39.png