文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>如何确保 Shell 脚本只有一个实例运行 转载

如何确保 Shell 脚本只有一个实例运行 转载

时间:2010-09-07  来源:wqfhenanxc


     在做维护的时候,经常要写一些脚本定期检查一些状态信息,而比较糟的时候可能该脚本在执行周期内没完成,接着第二个脚本又开始跑了。如何确保 Shell 脚本只有一个实例运行就成了一个比较有意思的话题。


方法一:使用lockf 命令。
man lockf: lockf -- execute a command while holding a file lock
例:如果要执行 /etc/run.sh ,
/usr/bin/lockf -t 0 /tmp/run.lock /etc/run.sh
例子的含义是:
/usr/bin/lockf -t 0 /tmp/run.lock /etc/run.sh 开始运行时首先检查 /tmp/ 下是否有run.lock 文件,是,不执行/etc/run.sh,退出,否,生成/tmp/run.lock 文件,执行/etc/run.sh
当/etc/run.sh 执行完成后,lockf 删除/tmp/run.lock

关于lockf 在非法退出的情况下是否正常删除文件,还不太清楚。

还可以在shell脚本头部创建pid文件,退出时删除pid文件。如果非法退出,则该pid文件不能正常被删除。所以需要在shell中读取该pid,并使用lsof或其他手段检查该锁文件是否正在被该pid进程占有。


方法二:简单一点就是使用ps,但需要保证文件名的唯一(可以使用全路径,运行时也使用全路径),比如脚本/home/han/bin/pwd.sh,可以在该脚本前:
count=`ps ax|grep "/home/han/bin/pwd.s[h]"|wc -l`
[ $count -gt 1 ] && exit 0

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载