sobota, 7 czerwca 2014

Jedna instancja cronjob-a

Problem stary jak świat...
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: