Skip to content

Instantly share code, notes, and snippets.

@adsurbum
Created December 1, 2014 15:54
Show Gist options
  • Save adsurbum/6e244db0fb718bc9af39 to your computer and use it in GitHub Desktop.
Save adsurbum/6e244db0fb718bc9af39 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -s
#
# solo v1.5
# Prevents multiple cron instances from running simultaneously.
#
# Copyright 2007-2010 Timothy Kay
# http://timkay.com/solo/
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
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;
@adsurbum
Copy link
Author

adsurbum commented Dec 1, 2014

sudo curl -q https://raw.github.com/timkay/solo/master/solo -o /usr/bin/solo
&& sudo chmod a+x $_

@adsurbum
Copy link
Author

adsurbum commented Dec 1, 2014

wget https://raw.github.com/timkay/solo/master/solo ; mv solo /usr/bin/solo; chmod a+x /usr/bin/solo

@adsurbum
Copy link
Author

adsurbum commented Dec 1, 2014

  • * * * * /usr/bin/solo -port=3001 /path/to/yourscript1.sh
  • * * * * /usr/bin/solo -port=3002 /path/to/yourscript2.sh
    */10 * * * * /usr/bin/solo -port=3003 /path/to/yourscript3.sh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment