📒 前言
本来今天开开心心,把写完的一个新项目(项目A)发集成,然后就愉快地摸鱼了。但是突然有人@我说,另一个系统(项目B)502了,我一看,服务挂掉了,重启项目B呗。然后过了一会,我发现我新发的项目A服务挂了,好奇怪呀,我就把项目A重启了,然后有人反馈项目B挂掉了,我逐渐发现事情不对劲。然后就愉快地去看代码了。
🥚 egg-script
两个项目都是使用egg框架搭建,使用egg-script驱动,用的命令都是下面这两个
{
"start:sit": "egg-scripts start --port=7080 --env=sit --daemon --title=egg-server-manage-web",
"stop": "egg-scripts stop --title=egg-server-manage-web"
}
每次发布项目都是先stop再start,那么很大的概率问题就是这个stop命令会把另一个项目停掉
🔍 解决
查看了文档后,发现egg-script中的title参数作用如下
--title=egg-server-showcase 用于方便 ps 进程时 grep 用,默认为 egg-server-${appname}
简单来说就是用来给进程加一个别名,然后方便杀掉这个进程。
如果两个项目都在一个服务器,且--title都一样的话,那么运行stop命令的时候就会把全部相关别名的进程全部停掉。我就是两种情况都符合的,所以才会两个项目重启的时候发生了互斥的行为。
解决办法也很简单:换一个--title值就好了