X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Ftask_server.pl;h=661c19a7640c6d722121f26b4b4d47b8417e9d83;hb=d12b396d0ff160f26ccd477132fc2d9d3687fef3;hp=cb332ec07ef0dfac39cc131410337d588e1400f3;hpb=29458987fb3e3f2027990a55c7c6e51c68683905;p=kivitendo-erp.git diff --git a/scripts/task_server.pl b/scripts/task_server.pl index cb332ec07..661c19a76 100755 --- a/scripts/task_server.pl +++ b/scripts/task_server.pl @@ -51,28 +51,49 @@ sub debug { $::lxdebug->message(0, @_); } -sub lxinit { +sub initialize_kivitendo { + chdir $exe_dir; + my $login = $lx_office_conf{task_server}->{login}; my $client = $lx_office_conf{task_server}->{client}; package main; + Form::disconnect_standard_dbh; $::lxdebug = LXDebug->new; $::locale = Locale->new($::lx_office_conf{system}->{language}); $::form = Form->new; $::auth = SL::Auth->new; die "No client configured or no client found with the name/ID '$client'" unless $::auth->set_client($client); $::instance_conf = SL::InstanceConfiguration->new; - $::request = { cgi => CGI->new({}) }; + $::request = SL::Request->new( + cgi => CGI->new({}), + layout => SL::Layout::None->new, + ); die 'cannot reach auth db' unless $::auth->session_tables_present; $::auth->restore_session; - - require "bin/mozilla/common.pl"; + $::auth->create_or_refresh_session; die "cannot find user $login" unless %::myconfig = $::auth->read_user(login => $login); - die "cannot find locale for user $login" unless $::locale = Locale->new('de'); + die "cannot find locale for user $login" unless $::locale = Locale->new($::myconfig{countrycode} || $::lx_office_conf{system}->{language}); + + $::form->{__ERROR_HANDLER} = sub { die @_ }; +} + +sub cleanup_kivitendo { + eval { SL::DB::Auth->new->db->dbh->rollback; }; + eval { SL::DB::BackgroundJob->new->db->dbh->rollback; }; + + $::auth->save_session; + $::auth->expire_sessions; + $::auth->reset; + + $::form = undef; + $::myconfig = (); + $::request = undef; + Form::disconnect_standard_dbh; } sub drop_privileges { @@ -157,7 +178,7 @@ sub gd_preconfig { die "Missing key 'client' in section [task_server] in config file" unless $lx_office_conf{task_server}->{client}; drop_privileges(); - lxinit(); + initialize_kivitendo(); return (); } @@ -165,6 +186,8 @@ sub gd_preconfig { sub gd_run { while (1) { my $ok = eval { + initialize_kivitendo(); + debug("Retrieving jobs"); my $jobs = SL::DB::Manager::BackgroundJob->get_all_need_to_run; @@ -174,10 +197,7 @@ sub gd_run { foreach my $job (@{ $jobs }) { # Provide fresh global variables in case legacy code modifies # them somehow. - $::locale = Locale->new($::lx_office_conf{system}->{language}); - $::form = Form->new; - - chdir $exe_dir; + initialize_kivitendo(); my $history = $job->run; @@ -193,6 +213,8 @@ sub gd_run { notify_on_failure(exception => $error); } + cleanup_kivitendo(); + debug("Sleeping"); my $seconds = 60 - (localtime)[0]; @@ -209,6 +231,17 @@ sub gd_run { } } +sub end_of_request { + $main::lxdebug->show_backtrace(); + die <