Solo - Prevents multiple cron instances from running simultaneously. by Timothy Kay
#!/usr/bin/perl -s | |
# | |
# solo v1.6 | |
# Prevents multiple cron instances from running simultaneously. | |
# | |
# Copyright 2007-2013 Timothy Kay | |
# http://timkay.com/solo/ | |
# | |
# 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; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment