如何确保一个 Linux Shell 只有一个运行实例

当我们在 Linux 下写了一个 Shell 做某些操作时,可能在一个终端运行了该脚本还没停止,然而又可能在另一个终端再一次执行了它,会有两个或多个实例在运行。或者是把这个 Shell 安排在 Cron 中,想让它每隔5分钟执行一次,有可能执行时间较长,正在执行当中,下一个5分钟的时刻到了,又在启动一次,这同样也会造成同一个 Shell会同时跑出多个实例来。

同时跑的多个实例就有可能对同一资源的操作造成数据的不可思异。这就要有一种方法来保证同一时刻同一脚本只能有一个实例在运行,借用很多软件的做法,比如 MySQL、Apache 等,在启动的时候生成一个临时的文件向后来者明确指示:有一个实例正在执行,不能执行第二个实例了。等到执行结束(可能被 Kill掉,被 Shutdown等),就把临时文件删除,以后可以运行新的实例了。

可以把某个 Shell 的执行权当作一个独占资源,只有获取锁(没有临时文件,并且建立它)时才有权执行它,执行完后释放锁(把临时文件删除)。 阅读全文 >>