linux命令行异步运行程序,在Linux上使用flock命令控制程序的异步执行

最近我常常需要同时ssh给若干台电脑做许多需要等待,而且可以同时进行的工作。例如:

让远端电脑同时更新套件

同时传送小档案给远端的电脑(时间大部分在ssh认证)

然而之后的动作又需要在确认上述工作完毕之后,才能继续进行。

过去我都是这样做:

# 前面的工作update_pkg_on_machine_1

update_pkg_on_machine_2

update_pkg_on_machine_3# ... 后面的工作

这样虽然可以确保工作同时进行完毕,但是就是很慢…

另一种可能的方法是:

# 前面的工作update_pkg_on_machine_1 &

update_pkg_on_machine_2 &

update_pkg_on_machine_3 &sleep 10# ... 后面的工作

这样子虽然可以同时进行工作,但是如果10秒内工作还没完成,接下来的工作可能就会出错了。

而工作要在多少秒之内做完,其实是很难掌握的。

利用 flock 来管理工作状态

我过去在自修作业系统的时候,有学到mutex这个东西,而 flock 就是可以在shell上使用的mutex。

flock 的官方说明

NAME

flock - Manage locks from shell scripts

SYNOPSIS

flock [-sxon] [-w timeout] lockfile [-c] command...

flock [-sxon] [-w timeout] lockdir [-c] command...

flock [-sxun] [-w timeout] fd

DESCRIPTION

This  utility  manages  flock(2) locks from within shell scripts or the

command line.

The first and second forms  wraps  the  lock  around  the  executing  a

command,  in  a  manner  similar  to  su(1)  or  newgrp(1).  It locks a

specified file or directory, which  is  created  (assuming  appropriate

permissions), if it does not already exist.

The  third form is convenient inside shell scripts, and is usually used

the following manner:

(

flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile

The mode used to open the file doesn’t matter to flock; using >  or  >>

allows  the  lockfile  to  be  created  if  it  does not already exist,

however, write permission is required; using 

already exists but only read permission is required.

By  default,  if  the  lock cannot be immediately acquired, flock waits

until the lock is available.

OPTIONS

-s, --shared

Obtain a shared lock, sometimes called a read lock.

-x, -e, --exclusive

Obtain an exclusive lock, sometimes called a write  lock.   This              is the default.

-u, --unlock              Drop  a  lock.   This  is  usually not required, since a lock is

automatically dropped when the file is closed.  However, it  may

be  required  in  special  cases,  for  example  if the enclosed

command group may have forked a background process which  should              not be holding the lock.

-n, --nb, --nonblock

Fail  (with  an  exit  code  of  1) rather than wait if the lock

cannot be immediately acquired.

-w, --wait, --timeout seconds

Fail (with an exit code of 1) if the  lock  cannot  be  acquired

within  seconds seconds.  Decimal fractional values are allowed.

-o, --close

Close the file descriptor on  which  the  lock  is  held  before

executing  command.   This  is  useful if command spawns a child

process which should not be hold ing the lock.

-c, --command command

Pass a single command to the shell with -c.

-h, --help

Print a help message.

AUTHOR

Written by H. Peter Anvin .

COPYRIGHT

Copyright  2003-2006 H. Peter Anvin.

This is free software; see the source for copying conditions.  There is

NO  warranty;  not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR

PURPOSE.

SEE ALSO

flock(2)

AVAILABILITY

The flock command is part of the util-linux-ng package and is available       from ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值