为了账号安全,请及时绑定邮箱和手机立即绑定

确保一次只运行一个shell脚本的快速和肮脏的方法

确保一次只运行一个shell脚本的快速和肮脏的方法

qq_遁去的一_1 2019-06-24 15:24:28
确保一次只运行一个shell脚本的快速和肮脏的方法确保在给定时间只运行一个shell脚本的快速和肮脏的方法是什么?
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

下面是一个使用锁文件在里面回音PID。如果进程在移除pidfile:

LOCKFILE=/tmp/lock.txtif [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
    echo "already running"
    exitfi# make sure the lockfile is removed when we exit and then claim ittrap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}# do stuffsleep 1000rm -f ${LOCKFILE}

这里的诀窍是kill -0它不会传递任何信号,而只是检查具有给定PID的进程是否存在。也呼吁trap将确保锁文件即使在进程被终止时也会删除(除非kill -9).


查看完整回答
反对 回复 2019-06-24
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

使用flock(1)若要使独占作用域锁成为ON文件描述符,请执行以下操作。这样,您甚至可以同步脚本的不同部分。

#!/bin/bash(
  # Wait for lock on /var/lock/.myscript.exclusivelock (fd 200) for 10 seconds
  flock -x -w 10 200 || exit 1

  # Do stuff) 200>/var/lock/.myscript.exclusivelock

这确保了在()一次只能由一个进程运行,并且进程不会等待太久锁定。

警告:这个特定的命令是util-linux..如果您运行的是Linux以外的操作系统,那么它可能可用,也可能不可用。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 844 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信