分页: 1 / 1

bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-03 0:39
bbqwinner
我的意思是如何在运行脚本的主程序前检查一下有没有其他同名的程序在运行,如果有,结束它们再继续运行下面的程序

我开始写的是if pgrep “***” then killall “***”
但是当我运行后发现因为在运行的脚本就是叫这个名字,所以就被killall掉了…………

因该怎么写呢???

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-03 1:09
lilydjwg
把 pid 写到某个文件中。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-03 1:14
cnkilior

代码: 全选

if [ -f $LOCK ];then
     exit 1
else
    touch $LOCK
fi

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-03 15:31
LarmBr
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-03 16:37
lilydjwg
LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
应该有 trap 可以在退出之前执行吧。这个 zsh 是有的。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 13:39
only_one
最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 13:42
xiooli
lock文件不错,启动时候先检查下有没有对应pid的程序在运行,没有的话就直接执行。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 14:42
rediscover
还是lock文件好。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 23:23
bbqwinner
LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 23:47
lilydjwg
bbqwinner 写了:
LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。
/tmp

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-04 23:57
bbqwinner
lilydjwg 写了:
bbqwinner 写了:
LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。
/tmp
恩,这样好!/tmp是所有用户可读写的 :em06

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-05 0:03
bbqwinner
only_one 写了:最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字
我试了下,好像不大行啊~
test.sh
===================

#!/bin/bash
pidof $0 && exit 1
echo "HI"
sleep 100
===================
我先运行一个,再运行另一个,发现没有象预想的一样退出 :em20
能不能详细解释下这个命令呢?

Re: bash脚本中如何保证只有一个该脚本在运行

发表于 : 2011-01-05 10:23
eexpress
dtach -n /tmp/dtach-xxxx xxxxx

通常我都是这样。方便判断的。