Wiederkerende Rechnungen: Implementation automatischer Versand via E-Mail
[kivitendo-erp.git] / scripts / task_server.pl
index 1bcb719..2fd93de 100755 (executable)
@@ -32,6 +32,7 @@ use File::Spec;
 use List::Util qw(first);
 use POSIX qw(setuid setgid);
 use SL::Auth;
+use SL::DBUpgrade2;
 use SL::DB::AuthClient;
 use SL::DB::BackgroundJob;
 use SL::BackgroundJob::ALL;
@@ -110,6 +111,8 @@ sub clean_before_sleeping {
   Form::disconnect_standard_dbh;
   SL::DBConnect::Cache->disconnect_all_and_clear;
   SL::DB->db_cache->clear;
+
+  File::Temp::cleanup();
 }
 
 sub drop_privileges {
@@ -210,6 +213,18 @@ EOT
     exit 2;
   }
 
+  initialize_kivitendo();
+
+  my $dbupdater_auth = SL::DBUpgrade2->new(form => $::form, auth => 1)->parse_dbupdate_controls;
+  if ($dbupdater_auth->unapplied_upgrade_scripts($::auth->dbconnect)) {
+    print STDERR <<EOT;
+The authentication database requires an upgrade. Please login to
+kivitendo's administration interface in order to apply it. The task
+server cannot start until the upgrade has been applied.
+EOT
+    exit 2;
+  }
+
   drop_privileges();
 
   return ();
@@ -259,6 +274,8 @@ sub run_once_for_all_clients {
 
 sub gd_run {
   while (1) {
+    $SIG{'ALRM'} = 'IGNORE';
+
     run_once_for_all_clients();
 
     debug("Sleeping");
@@ -267,7 +284,8 @@ sub gd_run {
 
     my $seconds = 60 - (localtime)[0];
     if (!eval {
-      local $SIG{'ALRM'} = sub {
+      $SIG{'ALRM'} = sub {
+        $SIG{'ALRM'} = 'IGNORE';
         debug("Got woken up by SIGALRM");
         die "Alarm!\n"
       };