Added printing cronbuilder's PID to lock file.
authorStanislaw Klekot <dozzie@jarowit.net>
Wed, 6 Jul 2011 11:26:11 +0000 (13:26 +0200)
committerStanislaw Klekot <dozzie@jarowit.net>
Wed, 6 Jul 2011 11:26:11 +0000 (13:26 +0200)
Not necessary, but it could be handy sometimes.

cronbuilder

index 3a78323..e6ba2e2 100755 (executable)
@@ -11,6 +11,7 @@ use Cron::Builder qw{spawn};
 use Cwd qw{realpath getcwd};
 use Getopt::Long;
 use Fcntl qw{:flock};
+use POSIX qw{O_WRONLY O_CREAT};
 
 #-----------------------------------------------------------------------------
 
@@ -25,14 +26,22 @@ sub true($) {
 sub run_lock {
   my ($file) = @_;
 
-  open my $fl, ">", $file
+  # first: open file for writing (don't truncate it!)
+  sysopen my($fl), $file, O_WRONLY | O_CREAT
     or die "Can't open lock file: $!";
 
+  # now try to achieve lock, but don't wait forever for it
   if (not flock $fl, LOCK_EX | LOCK_NB) {
+    # can't get lock; seems that someone else is holding it
     close $fl;
     return undef;
   }
 
+  # we got lock; print our PID to the file (it shouldn't be necessary, but
+  # could be handy someone else, like sysadmin or somebody)
+  printf $fl "%d\n", $$;
+  truncate $fl, tell $fl;
+
   return [$fl, realpath($file)];
 }