Pre and post backup commands
authorJamie Cameron <jcameron@webmin.com>
Tue, 9 Mar 2010 01:04:40 +0000 (17:04 -0800)
committerJamie Cameron <jcameron@webmin.com>
Tue, 9 Mar 2010 01:04:40 +0000 (17:04 -0800)
backup-config/CHANGELOG
backup-config/backup.pl
backup-config/edit.cgi
backup-config/lang/en
backup-config/save.cgi

index b6e2223..bed36ce 100644 (file)
@@ -18,3 +18,5 @@ Converted commands in the module's API file to POD format, and added more detail
 Backup files are now given 600 permissions, to prevent reading by non-root users.
 ---- Changes since 1.490 ----
 Added an option on the restore form to just show the contents of a backup.
+---- Changes since 1.510 ----
+Added fields to the scheduled backup page for pre and post backup commands.
index a3b0447..a486948 100755 (executable)
@@ -9,11 +9,31 @@ require './backup-config-lib.pl';
 $backup = &get_backup($ARGV[0]);
 $backup || die "Failed to find backup $ARGV[0]";
 
+# Run the pre-backup command, if any
+if ($backup->{'pre'}) {
+       $preout = &backquote_command("($backup->{'pre'}) 2>&1 </dev/null");
+       $premsg = &text('email_pre', $backup->{'pre'})."\n".
+                 $preout."\n";
+       if ($?) {
+               $err = $text{'email_prefailed'};
+               }
+       }
+
 # Do it
 @mods = split(/\s+/, $backup->{'mods'});
-$err = &execute_backup(\@mods, $backup->{'dest'}, \$size, undef,
-                      $backup->{'configfile'}, $backup->{'nofiles'},
-                      [ split(/\t+/, $backup->{'others'}) ]);
+if (!$err) {
+       $err = &execute_backup(\@mods, $backup->{'dest'}, \$size, undef,
+                              $backup->{'configfile'}, $backup->{'nofiles'},
+                              [ split(/\t+/, $backup->{'others'}) ]);
+       }
+
+# Run the post-backup command, if any
+if (!$err) {
+       $postout = &backquote_command("($backup->{'post'}) 2>&1 </dev/null");
+       $postmsg = "\n".
+                 &text('email_post', $backup->{'post'})."\n".
+                 $postout."\n";
+       }
 
 # Send off the results
 if (($err || $backup->{'emode'} == 0) && $backup->{'email'}) {
@@ -26,7 +46,8 @@ if (($err || $backup->{'emode'} == 0) && $backup->{'email'}) {
        $nice =~ s/<[^>]+>//g;
        $err =~ s/<[^>]+>//g;
        if ($err) {
-               $msg = $text{'email_mods'}."\n".
+               $msg = $premsg.
+                      $text{'email_mods'}."\n".
                       $mlist.
                       "\n".
                       &text('email_failed', $nice)."\n\n".
@@ -34,13 +55,16 @@ if (($err || $backup->{'emode'} == 0) && $backup->{'email'}) {
                $subject = &text('email_sfailed', $host);
                }
        else {
-               $msg = $text{'email_mods'}."\n".
+               $msg = $premsg.
+                      $text{'email_mods'}."\n".
                       $mlist.
                       "\n".
                       &text('email_ok', $nice)."\n".
-                      &text('email_final', &nice_size($size))."\n";
+                      &text('email_final', &nice_size($size))."\n".
+                      $postmsg;
                $subject = &text('email_sok', $host);
                }
+       print STDERR $msg,"\n";
        &mailboxes::send_text_mail($config{'from_addr'} ||
                                   &mailboxes::get_from_address(),
                                   $backup->{'email'},
index ec3d8df..4579ea6 100755 (executable)
@@ -21,7 +21,10 @@ else {
 print &ui_form_start("save.cgi", "post");
 print &ui_hidden("new", $in{'new'});
 print &ui_hidden("id", $in{'id'});
-print &ui_table_start($text{'edit_header'}, "width=100%", 2);
+
+@tds = ( "width=30%" );
+print &ui_hidden_table_start($text{'edit_header'}, "width=100%", 2,
+                            "main", 1, \@tds);
 
 # Show modules to backup
 @mods = &list_backup_modules();
@@ -41,6 +44,24 @@ print &ui_table_row($text{'edit_what'},
                                              $backup->{'nofiles'},
                                              $backup->{'others'}));
 
+print &ui_hidden_table_end();
+
+print &ui_hidden_table_start($text{'edit_header2'}, "width=100%", 2,
+                            "prepost", 0, \@tds);
+
+# Show pre-backup command
+print &ui_table_row($text{'edit_pre'},
+                   &ui_textbox("pre", $backup->{'pre'}, 60));
+
+# Show post-backup command
+print &ui_table_row($text{'edit_post'},
+                   &ui_textbox("post", $backup->{'post'}, 60));
+
+print &ui_hidden_table_end();
+
+print &ui_hidden_table_start($text{'edit_header3'}, "width=100%", 2,
+                            "sched", 0, \@tds);
+
 # Show email address
 print &ui_table_row($text{'edit_email'},
                    &ui_textbox("email", $backup->{'email'}, 40));
@@ -59,12 +80,12 @@ print &ui_table_row($text{'edit_sched'},
                    &ui_radio("sched", $job || $in{'new'} ? 1 : 0,
                              [ [ 0, $text{'no'} ],
                                [ 1, $text{'edit_schedyes'} ] ]));
+print &ui_table_row(undef,
+       "<tr> <td colspan=2><table border width=100%>\n".
+       &capture_function_output(\&cron::show_times_input, $backup).
+       "</table></td> </tr>\n");
 
-print "<tr> <td colspan=2><table border width=100%>\n";
-&cron::show_times_input($backup);
-print "</table></td> </tr>\n";
-
-print &ui_table_end();
+print &ui_hidden_table_end();
 if ($in{'new'}) {
        print &ui_form_end([ [ 'create', $text{'create'} ] ], "100%");
        }
index 81fcfb4..f78a524 100644 (file)
@@ -24,6 +24,8 @@ index_tabrestore=Restore now
 edit_title1=Create Scheduled Backup
 edit_title2=Edit Scheduled Backup
 edit_header=Scheduled backup options
+edit_header2=Pre and post backup commands
+edit_header3=Backup schedule
 edit_email=Email result to address
 edit_emode=When to send email
 edit_emode0=Always
@@ -40,6 +42,8 @@ edit_nofiles=Server configuration files
 edit_run=Save and Backup Now
 edit_return=backup form
 edit_other=Other listed files ..
+edit_pre=Pre-backup command
+edit_post=Post-backup command
 
 save_err=Failed to save backup
 save_emods=No modules selected
@@ -111,3 +115,7 @@ email_ok=to $1 succeeded.
 email_sfailed=Configuration backup on $1 failed
 email_sok=Configuration backup on $1 succeeded
 email_final=Final backup file size was $1
+email_pre=Running pre-backup command $1 ..
+email_post=Running post-backup command $1 ..
+email_prefailed=Pre-backup command failed!
+
index 02c6010..e1d3602 100755 (executable)
@@ -31,6 +31,8 @@ else {
        &cron::parse_times_input($backup, \%in);
        $backup->{'emode'} = $in{'emode'};
        $backup->{'email'} = $in{'email'};
+       $backup->{'pre'} = $in{'pre'};
+       $backup->{'post'} = $in{'post'};
        $backup->{'sched'} = $in{'sched'};
        ($backup->{'configfile'}, $backup->{'nofiles'}, $backup->{'others'}) =
                &parse_backup_what("what", \%in);