bash脚本如何确保运行的副本不多于一个?

joe*_*joe 2 linux bash shell

bash脚本如何确保运行的副本不多于一个?

我试过了:

ps -ef| grep /user/loca/shell/sh | wc -l
Run Code Online (Sandbox Code Playgroud)

由于grep命令,这显示了我2 .将其更改为:

ps -ef | grep /user/loca/shell/sh | grep -v 'grep' wc -l 
Run Code Online (Sandbox Code Playgroud)

然后它显示1.但是,如果我vim /user/loca/shell/sh然后执行:

ps -ef| grep /user/loca/shell/sh | grep -v 'grep' wc -l
Run Code Online (Sandbox Code Playgroud)

这表明2.但是我只有一个过程,我已经开始了.

bash脚本如何检查进程是否正在运行?

Jul*_*ian 7

Unix Daemons中经常使用的习惯用法是在启动时创建一个带有PID的文件.

然后你可以在启动时检查文件的存在和/或内容,如果它在那里,你退出并让该实例运行.

在脚本结束时,您将删除该文件,准备下次运行.

脚本运行时唯一的问题是,但由于某种原因没有完成,保留PID文件.这可以通过检查它的时间戳来处理,如果它是很久以前,你认为它是一个中止运行并继续当前的运行.