排他性(不能重复启动)Server开发

 

排他性(不能重复启动)Server开发(deamon)—进程排他性(文件锁)—脚本排他性(fuser) 

 原文:

1、进程排他性:
     在Linux中进行Server开发::
      第一步、deamon()              //调用deamon将进程转后台。
      第二步、加文件写锁:
            fd = open(“filename”, O_CREAT|O_WRONLY,0666);
            struct  flock  stLock;
             /*文件锁的数据结构*/
            stLock.l_type  =   F_WRLCK;
             /*l_type的取值可以是:F_WRLCK、F_RDLCK或F_UNLCK*/
           stLock.l_whence  =   SEEK_SET;
            /*l_whence的取值可以是:SEEK_SET、SEEK_CUR、SEEK_END*/
           stLock.l_start  =   0;
            /*偏移字节,相对于whence的偏移字节*/ 
           stLock.l_len =  0;
           /*
                  从l_whence+l_start开始,对文件中的l_len个字节加锁,
                  0表示加锁到EOF,即文件结束。
          */
        fcntl(fd,F_SETLK,&stLock);
         /*
               加锁时,cmd可以取值F_SETLK或F_SETLKW;
        */
      
 2、脚本排他性:  
      (
               fuser  filename,查看使用filename的进程PID,
               注意::vim   filename这种监控不到。
               fuser  filename   可以查看使用filename的进程PID,
               通过这个简介的判断filename(可执行程序)有没有运行,
               当然,也不一定完全合理,可能只在编译,也被认为是已经启动了。
               (不过,这个确实已经是最好的方法了。)
        )
       如果在脚本上加上个排他性的检查,发现该脚本正在执行的时候,第二次的执行就自动退出并给出提示可以避免一些人为的疏忽。
       下面是一个例子通过fuser来检查当前脚本是否正在执行,如果正在执行则提示并退出脚本。
#!/bin/bash
if fuser $0 2> /dev/null | sed "s/\\<$$\\>//" | grep -q '[0-9]'; then
    echo 'Script is already running...' 1>&2
    exit 1
fi
      
#program starts here        #即在这里编写自己的shell脚本

sleep 60
echo "=end="

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值