Given that the patch affects several files, a simpler way to accomplish the same (particularly so long as the patch is not formally merged) is to just add something like /bin/true to the end of each command that you want to always succeed (as per Craig's note a few weeks back, a sequence of commands can be given so this can be appended to the end). Seems much cleaner and both simpler to understand and implement...
Davide Brini wrote at about 16:05:52 +0200 on Wednesday, October 2, 2013: > (I originally sent this to the user mailing list, not knowing that a > development list exists). > > Hello, > > the attached patch introduces finer-grained check of pre/post user > command failure. Currently this is controlled with > $Conf{UserCmdCheckStatus} which is an all-or-nothing switch, so if it's set > to 1 and a non-critical script fails, the whole backup fails. However, > there may be cases where that is not wanted or needed, for example a > DumpPostUserCmd may be some email notification or other non-critical action > that may fail even if the actual xfer was ok, without the need to > invalidate the dump and throw everything away. In general, one may have > various pre/post commands that are ran when the dump is performed, some of > which are critical and some of which are not. > > So this patch introduces new configuration options like > $Conf{DumpPreUserCmdCheckStatus}, $Conf{DumpPostUserCmdCheckStatus} etc. > that can be individually set to fine-tune failure behavior. They are > evaluated only when the main switch $Conf{CmdCheckStatus} is set to 0; > if $Conf{UserCmdCheckStatus} is set to 1, it still has priority over any > other option, so the patch should be backwards compatible with existing > configurations without breaking anything. > > The patch is against 3.3.0. > > Any comment or criticism is welcome. > > Regards, > > > -- > D. > diff -urN BackupPC-3.3.0-orig/bin/BackupPC_archive > BackupPC-3.3.0/bin/BackupPC_archive > --- BackupPC-3.3.0-orig/bin/BackupPC_archive 2013-04-14 22:43:32.000000000 > +0200 > +++ BackupPC-3.3.0/bin/BackupPC_archive 2013-09-11 12:48:43.000000000 > +0200 > @@ -178,7 +178,7 @@ > # Run an optional pre-archive command > # > UserCommandRun("ArchivePreUserCmd"); > -if ( $? && $Conf{UserCmdCheckStatus} ) { > +if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{ArchivePreUserCmdCheckStatus} ) ) { > $stat{hostError} = "ArchivePreUserCmd returned error status $?"; > exit(ArchiveCleanup($client)); > } > @@ -298,7 +298,7 @@ > # > if ( $NeedPostCmd ) { > UserCommandRun("ArchivePostUserCmd"); > - if ( $? && $Conf{UserCmdCheckStatus} ) { > + if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{ArchivePostUserCmdCheckStatus} ) ) { > $stat{hostError} = "RestorePreUserCmd returned error status $?"; > $stat{xferOK} = 0; > } > diff -urN BackupPC-3.3.0-orig/bin/BackupPC_dump > BackupPC-3.3.0/bin/BackupPC_dump > --- BackupPC-3.3.0-orig/bin/BackupPC_dump 2013-04-14 22:43:32.000000000 > +0200 > +++ BackupPC-3.3.0/bin/BackupPC_dump 2013-09-11 12:47:21.000000000 +0200 > @@ -611,7 +611,7 @@ > # Run an optional pre-dump command > # > UserCommandRun("DumpPreUserCmd"); > -if ( $? && $Conf{UserCmdCheckStatus} ) { > +if ( $? && ( $Conf{UserCmdCheckStatus} || $Conf{DumpPreUserCmdCheckStatus} > ) ) { > print(LOG $bpc->timeStamp, > "DumpPreUserCmd returned error status $?... exiting\n"); > $XferLOG->write(\"DumpPreUserCmd returned error status $?... > exiting\n"); > @@ -646,7 +646,7 @@ > $shareDuplicate->{$shareName} = 1; > > UserCommandRun("DumpPreShareCmd", $shareName); > - if ( $? && $Conf{UserCmdCheckStatus} ) { > + if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{DumpPreShareCmdCheckStatus} ) ) { > print(LOG $bpc->timeStamp, > "DumpPreShareCmd returned error status $?... exiting\n"); > UserCommandRun("DumpPostUserCmd") if ( $NeedPostCmd ); > @@ -892,7 +892,7 @@ > > if ( $NeedPostCmd ) { > UserCommandRun("DumpPostShareCmd", $shareName); > - if ( $? && $Conf{UserCmdCheckStatus} ) { > + if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{DumpPostShareCmdCheckStatus} ) ) { > print(LOG $bpc->timeStamp, > "DumpPostShareCmd returned error status $?... > exiting\n"); > $stat{hostError} = "DumpPostShareCmd returned error status $?"; > @@ -957,7 +957,7 @@ > } > > UserCommandRun("DumpPostUserCmd") if ( $NeedPostCmd ); > -if ( $? && $Conf{UserCmdCheckStatus} ) { > +if ( $? && ( $Conf{UserCmdCheckStatus} || $Conf{DumpPostUserCmdCheckStatus} > ) ) { > print(LOG $bpc->timeStamp, > "DumpPostUserCmd returned error status $?... exiting\n"); > $stat{hostError} = "DumpPostUserCmd returned error status $?"; > diff -urN BackupPC-3.3.0-orig/bin/BackupPC_restore > BackupPC-3.3.0/bin/BackupPC_restore > --- BackupPC-3.3.0-orig/bin/BackupPC_restore 2013-04-14 22:43:32.000000000 > +0200 > +++ BackupPC-3.3.0/bin/BackupPC_restore 2013-09-11 12:49:30.000000000 > +0200 > @@ -227,7 +227,7 @@ > # Run an optional pre-restore command > # > UserCommandRun("RestorePreUserCmd"); > -if ( $? && $Conf{UserCmdCheckStatus} ) { > +if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{RestorePreUserCmdCheckStatus}) ) { > $stat{hostError} = "RestorePreUserCmd returned error status $?"; > exit(RestoreCleanup($client)); > } > @@ -544,7 +544,7 @@ > # > if ( $NeedPostCmd ) { > UserCommandRun("RestorePostUserCmd"); > - if ( $? && $Conf{UserCmdCheckStatus} ) { > + if ( $? && ( $Conf{UserCmdCheckStatus} || > $Conf{RestorePostUserCmdCheckStatus} ) ) { > $stat{hostError} = "RestorePostUserCmd returned error status > $?"; > $stat{xferOK} = 0; > } > diff -urN BackupPC-3.3.0-orig/conf/config.pl BackupPC-3.3.0/conf/config.pl > --- BackupPC-3.3.0-orig/conf/config.pl 2013-04-14 22:43:32.000000000 > +0200 > +++ BackupPC-3.3.0/conf/config.pl 2013-09-11 12:53:20.000000000 +0200 > @@ -1838,6 +1838,27 @@ > $Conf{UserCmdCheckStatus} = 0; > > # > +# Individual pre/post commands can also be checked, for example > +# you may want to abort the backup if the DumpPreUserCmd fails, > +# but keep it if the DumpPostUserCmd fails (eg because it's just > +# an email notification or other non-critical activity, which > +# can fail without having to throw the backup away). > +# > +# If $Conf{UserCmdCheckStatus} above is set to 1, exit status > +# of any pre/post command is *always* checked, regardless of the > +# settings below; if you want to check individual commands, set > +# $Conf{UserCmdCheckStatus} to 0 and use the configuration > +# options below, whose names should be self-explanatory. > +$Conf{DumpPreUserCmdCheckStatus} = 0; > +$Conf{DumpPostUserCmdCheckStatus} = 0; > +$Conf{DumpPreShareCmdCheckStatus} = 0; > +$Conf{DumpPostShareCmdCheckStatus} = 0; > +$Conf{ArchivePreUserCmdCheckStatus} = 0; > +$Conf{ArchivePostUserCmdCheckStatus} = 0; > +$Conf{RestorePreUserCmdCheckStatus} = 0; > +$Conf{RestorePostUserCmdCheckStatus} = 0; > + > +# > # Override the client's host name. This allows multiple clients > # to all refer to the same physical host. This should only be > # set in the per-PC config file and is only used by BackupPC at > @@ -2180,96 +2201,104 @@ > # sorts of bad things. > # > $Conf{CgiUserConfigEdit} = { > - FullPeriod => 1, > - IncrPeriod => 1, > - FullKeepCnt => 1, > - FullKeepCntMin => 1, > - FullAgeMax => 1, > - IncrKeepCnt => 1, > - IncrKeepCntMin => 1, > - IncrAgeMax => 1, > - IncrLevels => 1, > - IncrFill => 1, > - PartialAgeMax => 1, > - RestoreInfoKeepCnt => 1, > - ArchiveInfoKeepCnt => 1, > - BackupFilesOnly => 1, > - BackupFilesExclude => 1, > - BackupsDisable => 1, > - BlackoutBadPingLimit => 1, > - BlackoutGoodCnt => 1, > - BlackoutPeriods => 1, > - BackupZeroFilesIsFatal => 1, > - ClientCharset => 1, > - ClientCharsetLegacy => 1, > - XferMethod => 1, > - XferLogLevel => 1, > - SmbShareName => 1, > - SmbShareUserName => 1, > - SmbSharePasswd => 1, > - SmbClientFullCmd => 0, > - SmbClientIncrCmd => 0, > - SmbClientRestoreCmd => 0, > - TarShareName => 1, > - TarFullArgs => 1, > - TarIncrArgs => 1, > - TarClientCmd => 0, > - TarClientRestoreCmd => 0, > - TarClientPath => 0, > - RsyncShareName => 1, > - RsyncdClientPort => 1, > - RsyncdPasswd => 1, > - RsyncdUserName => 1, > - RsyncdAuthRequired => 1, > - RsyncCsumCacheVerifyProb => 1, > - RsyncArgs => 1, > - RsyncArgsExtra => 1, > - RsyncRestoreArgs => 1, > - RsyncClientCmd => 0, > - RsyncClientRestoreCmd => 0, > - RsyncClientPath => 0, > - FtpShareName => 1, > - FtpUserName => 1, > - FtpPasswd => 1, > - FtpBlockSize => 1, > - FtpPort => 1, > - FtpTimeout => 1, > - FtpFollowSymlinks => 1, > - FtpRestoreEnabled => 1, > - ArchiveDest => 1, > - ArchiveComp => 1, > - ArchivePar => 1, > - ArchiveSplit => 1, > - ArchiveClientCmd => 0, > - FixedIPNetBiosNameCheck => 1, > - NmbLookupCmd => 0, > - NmbLookupFindHostCmd => 0, > - PingMaxMsec => 1, > - PingCmd => 0, > - ClientTimeout => 1, > - MaxOldPerPCLogFiles => 1, > - CompressLevel => 1, > - ClientNameAlias => 1, > - DumpPreUserCmd => 0, > - DumpPostUserCmd => 0, > - RestorePreUserCmd => 0, > - RestorePostUserCmd => 0, > - ArchivePreUserCmd => 0, > - ArchivePostUserCmd => 0, > - DumpPostShareCmd => 0, > - DumpPreShareCmd => 0, > - UserCmdCheckStatus => 0, > - EMailNotifyMinDays => 1, > - EMailFromUserName => 1, > - EMailAdminUserName => 1, > - EMailUserDestDomain => 1, > - EMailNoBackupEverSubj => 1, > - EMailNoBackupEverMesg => 1, > - EMailNotifyOldBackupDays => 1, > - EMailNoBackupRecentSubj => 1, > - EMailNoBackupRecentMesg => 1, > - EMailNotifyOldOutlookDays => 1, > - EMailOutlookBackupSubj => 1, > - EMailOutlookBackupMesg => 1, > - EMailHeaders => 1, > + FullPeriod => 1, > + IncrPeriod => 1, > + FullKeepCnt => 1, > + FullKeepCntMin => 1, > + FullAgeMax => 1, > + IncrKeepCnt => 1, > + IncrKeepCntMin => 1, > + IncrAgeMax => 1, > + IncrLevels => 1, > + IncrFill => 1, > + PartialAgeMax => 1, > + RestoreInfoKeepCnt => 1, > + ArchiveInfoKeepCnt => 1, > + BackupFilesOnly => 1, > + BackupFilesExclude => 1, > + BackupsDisable => 1, > + BlackoutBadPingLimit => 1, > + BlackoutGoodCnt => 1, > + BlackoutPeriods => 1, > + BackupZeroFilesIsFatal => 1, > + ClientCharset => 1, > + ClientCharsetLegacy => 1, > + XferMethod => 1, > + XferLogLevel => 1, > + SmbShareName => 1, > + SmbShareUserName => 1, > + SmbSharePasswd => 1, > + SmbClientFullCmd => 0, > + SmbClientIncrCmd => 0, > + SmbClientRestoreCmd => 0, > + TarShareName => 1, > + TarFullArgs => 1, > + TarIncrArgs => 1, > + TarClientCmd => 0, > + TarClientRestoreCmd => 0, > + TarClientPath => 0, > + RsyncShareName => 1, > + RsyncdClientPort => 1, > + RsyncdPasswd => 1, > + RsyncdUserName => 1, > + RsyncdAuthRequired => 1, > + RsyncCsumCacheVerifyProb => 1, > + RsyncArgs => 1, > + RsyncArgsExtra => 1, > + RsyncRestoreArgs => 1, > + RsyncClientCmd => 0, > + RsyncClientRestoreCmd => 0, > + RsyncClientPath => 0, > + FtpShareName => 1, > + FtpUserName => 1, > + FtpPasswd => 1, > + FtpBlockSize => 1, > + FtpPort => 1, > + FtpTimeout => 1, > + FtpFollowSymlinks => 1, > + FtpRestoreEnabled => 1, > + ArchiveDest => 1, > + ArchiveComp => 1, > + ArchivePar => 1, > + ArchiveSplit => 1, > + ArchiveClientCmd => 0, > + FixedIPNetBiosNameCheck => 1, > + NmbLookupCmd => 0, > + NmbLookupFindHostCmd => 0, > + PingMaxMsec => 1, > + PingCmd => 0, > + ClientTimeout => 1, > + MaxOldPerPCLogFiles => 1, > + CompressLevel => 1, > + ClientNameAlias => 1, > + DumpPreUserCmd => 0, > + DumpPostUserCmd => 0, > + RestorePreUserCmd => 0, > + RestorePostUserCmd => 0, > + ArchivePreUserCmd => 0, > + ArchivePostUserCmd => 0, > + DumpPostShareCmd => 0, > + DumpPreShareCmd => 0, > + UserCmdCheckStatus => 0, > + DumpPreUserCmdCheckStatus => 0; > + DumpPostUserCmdCheckStatus => 0; > + DumpPreShareCmdCheckStatus => 0; > + DumpPostShareCmdCheckStatus => 0; > + ArchivePreUserCmdCheckStatus => 0; > + ArchivePostUserCmdCheckStatus => 0; > + RestorePreUserCmdCheckStatus => 0; > + RestorePostUserCmdCheckStatus => 0; > + EMailNotifyMinDays => 1, > + EMailFromUserName => 1, > + EMailAdminUserName => 1, > + EMailUserDestDomain => 1, > + EMailNoBackupEverSubj => 1, > + EMailNoBackupEverMesg => 1, > + EMailNotifyOldBackupDays => 1, > + EMailNoBackupRecentSubj => 1, > + EMailNoBackupRecentMesg => 1, > + EMailNotifyOldOutlookDays => 1, > + EMailOutlookBackupSubj => 1, > + EMailOutlookBackupMesg => 1, > + EMailHeaders => 1, > }; > diff -urN BackupPC-3.3.0-orig/doc/BackupPC.pod > BackupPC-3.3.0/doc/BackupPC.pod > --- BackupPC-3.3.0-orig/doc/BackupPC.pod 2013-04-14 22:43:32.000000000 > +0200 > +++ BackupPC-3.3.0/doc/BackupPC.pod 2013-09-11 12:57:04.000000000 +0200 > @@ -4441,6 +4441,27 @@ > that snapshots or dumps a database which fails because > of some database error. > > +=item $Conf{DumpPreUserCmdCheckStatus} = 0; > +=item $Conf{DumpPostUserCmdCheckStatus} = 0; > +=item $Conf{DumpPreShareCmdCheckStatus} = 0; > +=item $Conf{DumpPostShareCmdCheckStatus} = 0; > +=item $Conf{ArchivePreUserCmdCheckStatus} = 0; > +=item $Conf{ArchivePostUserCmdCheckStatus} = 0; > +=item $Conf{RestorePreUserCmdCheckStatus} = 0; > +=item $Conf{RestorePostUserCmdCheckStatus} = 0; > + > +Individual pre/post commands can also be checked, for example > +you may want to abort the backup if the DumpPreUserCmd fails, > +but keep it if the DumpPostUserCmd fails (eg because it's just > +an email notification or other non-critical activity, which > +can fail without having to throw the backup away). > + > +If $Conf{UserCmdCheckStatus} above is set to 1, exit status > +of any pre/post command is *always* checked, regardless of the > +settings below; if you want to check individial commands, set > +$Conf{UserCmdCheckStatus} to 0 and use the configuration > +options above, whose names should be self-explanatory. > + > =item $Conf{ClientNameAlias} = undef; > > Override the client's host name. This allows multiple clients > diff -urN BackupPC-3.3.0-orig/lib/BackupPC/CGI/EditConfig.pm > BackupPC-3.3.0/lib/BackupPC/CGI/EditConfig.pm > --- BackupPC-3.3.0-orig/lib/BackupPC/CGI/EditConfig.pm 2013-04-14 > 22:43:32.000000000 +0200 > +++ BackupPC-3.3.0/lib/BackupPC/CGI/EditConfig.pm 2013-09-11 > 12:52:21.000000000 +0200 > @@ -357,6 +357,14 @@ > {name => "ArchivePreUserCmd"}, > {name => "ArchivePostUserCmd"}, > {name => "UserCmdCheckStatus"}, > + {name => "DumpPreUserCmdCheckStatus"}, > + {name => "DumpPostUserCmdCheckStatus"}, > + {name => "DumpPreShareCmdCheckStatus"}, > + {name => "DumpPostShareCmdCheckStatus"}, > + {name => "ArchivePreUserCmdCheckStatus"}, > + {name => "ArchivePostUserCmdCheckStatus"}, > + {name => "RestorePreUserCmdCheckStatus"}, > + {name => "RestorePostUserCmdCheckStatus"}, > ], > }, > hosts => { > diff -urN BackupPC-3.3.0-orig/lib/BackupPC/Config/Meta.pm > BackupPC-3.3.0/lib/BackupPC/Config/Meta.pm > --- BackupPC-3.3.0-orig/lib/BackupPC/Config/Meta.pm 2013-04-14 > 22:43:32.000000000 +0200 > +++ BackupPC-3.3.0/lib/BackupPC/Config/Meta.pm 2013-09-11 > 12:51:22.000000000 +0200 > @@ -320,8 +320,15 @@ > RestorePostUserCmd => {type => "string", undefIfEmpty => 1}, > ArchivePreUserCmd => {type => "string", undefIfEmpty => 1}, > ArchivePostUserCmd => {type => "string", undefIfEmpty => 1}, > - UserCmdCheckStatus => "boolean", > - > + UserCmdCheckStatus => "boolean", > + DumpPreUserCmdCheckStatus => "boolean", > + DumpPostUserCmdCheckStatus => "boolean", > + DumpPreShareCmdCheckStatus => "boolean", > + DumpPostShareCmdCheckStatus => "boolean", > + ArchivePreUserCmdCheckStatus => "boolean", > + ArchivePostUserCmdCheckStatus => "boolean", > + RestorePreUserCmdCheckStatus => "boolean", > + RestorePostUserCmdCheckStatus => "boolean", > ClientNameAlias => {type => "string", undefIfEmpty => 1}, > > ###################################################################### > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk > _______________________________________________ > BackupPC-devel mailing list > BackupPC-devel@lists.sourceforge.net > List: https://lists.sourceforge.net/lists/listinfo/backuppc-devel > Wiki: http://backuppc.wiki.sourceforge.net > Project: http://backuppc.sourceforge.net/ ------------------------------------------------------------------------------ October Webinars: Code for Performance Free Intel webinars can help you accelerate application performance. Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from the latest Intel processors and coprocessors. See abstracts and register > http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk _______________________________________________ BackupPC-devel mailing list BackupPC-devel@lists.sourceforge.net List: https://lists.sourceforge.net/lists/listinfo/backuppc-devel Wiki: http://backuppc.wiki.sourceforge.net Project: http://backuppc.sourceforge.net/