当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-03 0:39 

注册: 2010-12-28 12:58
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
我的意思是如何在运行脚本的主程序前检查一下有没有其他同名的程序在运行,如果有,结束它们再继续运行下面的程序

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

因该怎么写呢???


页首
 用户资料  
 
2 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-03 1:09 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
把 pid 写到某个文件中。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
3 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-03 1:14 
头像

注册: 2007-08-05 17:40
帖子: 4980
送出感谢: 0 次
接收感谢: 6
代码:
if [ -f $LOCK ];then
     exit 1
else
    touch $LOCK
fi


_________________
free VPN
YouKuDownLoader
代码:
pip3 install ykdl

install YouKuDownLoader, have fun in downloading.
YouKuDownLoader所支持网站列表


页首
 用户资料  
 
4 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-03 15:31 

注册: 2010-03-14 21:25
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-03 16:37 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
LarmBr 写道:
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。


应该有 trap 可以在退出之前执行吧。这个 zsh 是有的。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 13:39 

注册: 2010-05-25 16:49
帖子: 186
送出感谢: 0 次
接收感谢: 0 次
最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字


页首
 用户资料  
 
7 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 13:42 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
lock文件不错,启动时候先检查下有没有对应pid的程序在运行,没有的话就直接执行。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 14:42 

注册: 2010-01-13 23:26
帖子: 3173
送出感谢: 0 次
接收感谢: 12
还是lock文件好。


_________________
Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF


页首
 用户资料  
 
9 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 23:23 

注册: 2010-12-28 12:58
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
LarmBr 写道:
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。


但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 23:47 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
bbqwinner 写道:
LarmBr 写道:
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。


但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。


/tmp


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
11 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-04 23:57 

注册: 2010-12-28 12:58
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
lilydjwg 写道:
bbqwinner 写道:
LarmBr 写道:
呵呵,我模仿内核用锁文件。在脚本开头检测是否有锁文件存在,有就退出。没有就创建一个锁文件。在脚本执行完要退出的地方把锁文件删除。注意,任何有可能退出的地方都要删除。


但是我想问对于不同用户来说应该把lock文件放到哪里呢,如何保证这个文件所有用户都可以创建而且所有用户都可以找到这个位置呢?
我是说对于普通用户而言只能在自己的home文件夹内创建文件,但是其他用户不一定能访问它。


/tmp

恩,这样好!/tmp是所有用户可读写的 :em06


页首
 用户资料  
 
12 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-05 0:03 

注册: 2010-12-28 12:58
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
only_one 写道:
最简单的方法是
pidof $0 && exit 1
但要注意脚本的名字


我试了下,好像不大行啊~
test.sh
===================

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


页首
 用户资料  
 
13 楼 
 文章标题 : Re: bash脚本中如何保证只有一个该脚本在运行
帖子发表于 : 2011-01-05 10:23 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
dtach -n /tmp/dtach-xxxx xxxxx

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


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译