Bash脚本只运行一次

我想做一个sh脚本,在任何时候最多只能运行一次。 说如果我执行脚本,然后我再次执行脚本,我怎么做,如果脚本的第一个exec仍然工作,第二个将失败,一个错误。 也就是说,我需要检查脚本是否在执行任何操作之前在其他地方运行。 我将如何去做这个?

我的脚本运行了一个长时间的运行过程(即永远运行),我想用cron这样的东西每15分钟调用一次脚本,以防万一进程失败,它将被下一个cron脚本重新启动。

干杯。

Solutions Collecting From Web of "Bash脚本只运行一次"

你想要一个pid文件,可能是这样的:

pidfile=/path/to/pidfile if [ -f "$pidfile" ] && kill -0 `cat $pidfile` 2>/dev/null; then echo still running exit 1 fi echo $$ > $pidfile 

我想你需要使用lockfile命令。 请参阅在shell脚本(BASH)或http://www.davidpashley.com/articles/writing-robust-shell-scripts.html中 使用lockfiles

将进程ID写入文件,然后在新实例启动时检查文件以查看旧实例是否仍在运行。

您可以使用run-one软件包,它提供了run-onerun-this-onekeep-one-running

该软件包: https : //launchpad.net/ubuntu/+source/run-one

博客介绍: http : //blog.dustinkirkland.com/2011/02/introducing-run-one-and-run-this-one.html

 ( if flock -n 9 then echo 'Not doing the critical operation (lock present).' exit; fi # critical section goes here ) 9>'/run/lock/some_lock_file' rm -f '/run/lock/some_lock_file' 

从群(1)手册页的例子。 在shell脚本中使用非常实用。