许吉友 - 运维

让进程不能同时运行多份

守护进程一般都是服务程序,服务程序只要运行一个就够了,多次同时运行并没有意义甚至会带来错误。

因此我们希望我们的程序具有一个单例运行的功能。意思就是说当我们去运行程序时,如果当前还没有这个程序的进程运行则运行之,如果之前已经有一个这个程序的进程在运行则本次运行直接退出(提示程序已经在运行)。

实现防范:

最常用的一种方法就是:用一个文件的存在与否来做标志。具体做法是程序在执行之初去判断一个特定的文件是否存在,若存在则标明进程已经在运行,若不存在则标明进程没有在运行。然后运行程序时去创建这个文件。当程序结束的时候去删除这个文件即可。

比如:/var/run/elasticsearch/elasticsearch.pid

如果想要运行多份,比如想要运行 Elasticsearch 的伪分布式集群,就需要修改配置文件中这个 pid 文件的路径。