Proste rozwiązanie: http://timkay.com/solo/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/usr/bin/perl -s # # solo v1.6 # Prevents multiple cron instances from running simultaneously. # # Copyright 2007-2013 Timothy Kay # # It is free software; you can redistribute it and/or modify it under the terms of either: # # a) the GNU General Public License as published by the Free Software Foundation; # either version 1 (http://dev.perl.org/licenses/gpl1.html), or (at your option) # any later version (http://www.fsf.org/licenses/licenses.html#GNUGPL), or # # b) the "Artistic License" (http://dev.perl.org/licenses/artistic.html), or # # c) the MIT License (http://opensource.org/licenses/MIT) # use Socket; alarm $timeout if $timeout; $port =~ /^\d+$/ or $noport or die "Usage: $0 -port=PORT COMMAND\n" ; if ($port) { $addr = pack(CnC, 127, $<, 1); print "solo: bind " , join( "." , unpack(C4, $addr)), ":$port\n" if $verbose; $^F = 10; # unset close-on-exec socket(SOLO, PF_INET, SOCK_STREAM, getprotobyname( 'tcp' )) or die "socket: $!" ; bind(SOLO, sockaddr_in($port, $addr)) or $silent? exit : die "solo($port): $!\n" ; } sleep $sleep if $sleep; exec @ARGV; |
Brak komentarzy:
Prześlij komentarz