X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Ftask_server.pl;h=661c19a7640c6d722121f26b4b4d47b8417e9d83;hb=d12b396d0ff160f26ccd477132fc2d9d3687fef3;hp=ff21183da57b1a362de2b26ea7cfe44da3a855b4;hpb=cff0e9be7e6925c22dab7cb0b52ab9e23af0d56a;p=kivitendo-erp.git diff --git a/scripts/task_server.pl b/scripts/task_server.pl index ff21183da..661c19a76 100755 --- a/scripts/task_server.pl +++ b/scripts/task_server.pl @@ -51,44 +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}); -sub per_job_initialization { - $::locale = Locale->new($::myconfig{countrycode} || $::lx_office_conf{system}->{language}); - $::form = Form->new; - $::instance_conf = SL::InstanceConfiguration->new; - $::request = SL::Request->new( - cgi => CGI->new({}), - layout => SL::Layout::None->new, - ); + $::form->{__ERROR_HANDLER} = sub { die @_ }; +} - $::auth->restore_session; +sub cleanup_kivitendo { + eval { SL::DB::Auth->new->db->dbh->rollback; }; + eval { SL::DB::BackgroundJob->new->db->dbh->rollback; }; - $::instance_conf->init; + $::auth->save_session; + $::auth->expire_sessions; + $::auth->reset; - $::form->{__ERROR_HANDLER} = sub { die @_ }; + $::form = undef; + $::myconfig = (); + $::request = undef; + Form::disconnect_standard_dbh; } sub drop_privileges { @@ -173,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 (); } @@ -181,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; @@ -190,9 +197,7 @@ sub gd_run { foreach my $job (@{ $jobs }) { # Provide fresh global variables in case legacy code modifies # them somehow. - per_job_initialization(); - - chdir $exe_dir; + initialize_kivitendo(); my $history = $job->run; @@ -208,6 +213,8 @@ sub gd_run { notify_on_failure(exception => $error); } + cleanup_kivitendo(); + debug("Sleeping"); my $seconds = 60 - (localtime)[0];