Timothy J Massey <[email protected]> wrote on 03/20/2012 05:25:30 PM:

> One thought would be to fork the parity (and tar) command and open 
> the output of the command from the parent, and let the parent both 
> add the output to the log file as well as update the alarm.  I have 
> some tiny experience with this (mainly boiler-plate code).  Would 
> such a change be at least theoretically acceptable to being included
> as a patch?  I don't want to make such a change without it being 
> possibly included upstream:  I don't like the idea of depending on 
> it in the future without that. 

Well, I got no reply, but I went ahead and did it.  I would greatly 
appreciate comments on this.  Ideally, I would love to see this added to 
BackupPC.

Tim Massey

 
Out of the Box Solutions, Inc. 
Creative IT Solutions Made Simple!
http://www.OutOfTheBoxSolutions.com
[email protected] 
 
22108 Harper Ave.
St. Clair Shores, MI 48080
Office: (800)750-4OBS (4627)
Cell: (586)945-8796 


--- BackupPC_archiveHost.org    2012-01-22 21:52:31.000000000 -0500
+++ BackupPC_archiveHost.new    2012-04-03 12:32:53.850060836 -0400
@@ -157,11 +157,37 @@ if ( -d $outLoc && -x $parPath ) {
     if ( length($parfile) ) {
         print("Running $parPath to create parity files\n");
        my $parCmd = "$parPath c -r$parfile 
$outLocE/$host.$bkupNum.tar$fileExt.par2 
$outLocE/$host.$bkupNum.tar$fileExt*";
-        $ret = system($parCmd);
-        if ( $ret ) {
+
+        # Forking parity command so that we can reset alarm
+        my $child;
+        if (not defined($child = open(INPUTFILE, "-|"))) {
+            print("Could not fork:  $!\n");
+            print("Error:  $parPath failed\n");
+            exit(1);
+        }
+        if ($child) {
+            # Parent process - do nothing here
+        } else {
+            # Child process:  execute command and exit
+            system($parCmd);
+            exit $?;
+        }
+        # Child exited above, so if we're here, we're the parent...
+
+        # Start processing the output of our child:
+        my $parOutput;
+        while ( read(INPUTFILE, $parOutput, 1) ) {
+            # The parity program has output something:  reset alrm
+            alarm 0;
+            # If you want to process the output in some way, do it here
+            print $parOutput;
+        }
+        if ( $? ) {
            print("Executing: $parCmd\n");
             print("Error: $parPath failed\n");
             exit(1);
         }
+        close(INPUTFILE);
+        # End processing child output
     }
 }
------------------------------------------------------------------------------
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
_______________________________________________
BackupPC-users mailing list
[email protected]
List:    https://lists.sourceforge.net/lists/listinfo/backuppc-users
Wiki:    http://backuppc.wiki.sourceforge.net
Project: http://backuppc.sourceforge.net/

Reply via email to