bash脚本中如何保证只有一个该脚本在运行
-
- 帖子: 28
- 注册时间: 2010-12-28 12:58
bash脚本中如何保证只有一个该脚本在运行
我的意思是如何在运行脚本的主程序前检查一下有没有其他同名的程序在运行,如果有,结束它们再继续运行下面的程序
我开始写的是if pgrep “***” then killall “***”
但是当我运行后发现因为在运行的脚本就是叫这个名字,所以就被killall掉了…………
因该怎么写呢???
我开始写的是if pgrep “***” then killall “***”
但是当我运行后发现因为在运行的脚本就是叫这个名字,所以就被killall掉了…………
因该怎么写呢???
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: bash脚本中如何保证只有一个该脚本在运行
把 pid 写到某个文件中。
- cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
Re: bash脚本中如何保证只有一个该脚本在运行
代码: 全选
if [ -f $LOCK ];then
exit 1
else
touch $LOCK
fi
-
- 帖子: 39
- 注册时间: 2010-03-14 21:25
Re: bash脚本中如何保证只有一个该脚本在运行
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: bash脚本中如何保证只有一个该脚本在运行
应该有 trap 可以在退出之前执行吧。这个 zsh 是有的。LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
-
- 帖子: 186
- 注册时间: 2010-05-25 16:49
Re: bash脚本中如何保证只有一个该脚本在运行
最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字
pidof $0 && exit 1
但要注意脚本的名字
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: bash脚本中如何保证只有一个该脚本在运行
lock文件不错,启动时候先检查下有没有对应pid的程序在运行,没有的话就直接执行。
-
- 帖子: 3173
- 注册时间: 2010-01-13 23:26
-
- 帖子: 28
- 注册时间: 2010-12-28 12:58
Re: bash脚本中如何保证只有一个该脚本在运行
但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。
- lilydjwg
- 论坛版主
- 帖子: 4249
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: bash脚本中如何保证只有一个该脚本在运行
/tmpbbqwinner 写了:但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。
-
- 帖子: 28
- 注册时间: 2010-12-28 12:58
Re: bash脚本中如何保证只有一个该脚本在运行
恩,这样好!/tmp是所有用户可读写的lilydjwg 写了:/tmpbbqwinner 写了:但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?LarmBr 写了:呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。
-
- 帖子: 28
- 注册时间: 2010-12-28 12:58
Re: bash脚本中如何保证只有一个该脚本在运行
我试了下,好像不大行啊~only_one 写了:最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字
test.sh
===================
#!/bin/bash
pidof $0 && exit 1
echo "HI"
sleep 100
===================
我先运行一个,再运行另一个,发现没有象预想的一样退出
能不能详细解释下这个命令呢?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙