projects
/
kivitendo-erp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pflichtenheftitems: Masken für neue (Unter)Funktionsblöcke
[kivitendo-erp.git]
/
scripts
/
task_server.pl
diff --git
a/scripts/task_server.pl
b/scripts/task_server.pl
index
8c17ca7
..
81d2078
100755
(executable)
--- a/
scripts/task_server.pl
+++ b/
scripts/task_server.pl
@@
-2,17
+2,20
@@
use strict;
use strict;
+my $exe_dir;
+
BEGIN {
BEGIN {
- require Cwd;
+ use FindBin;
+ use lib "$FindBin::Bin/..";
- my $dir = $0;
- $dir = Cwd::getcwd() . '/' . $dir unless $dir =~ m|^/|;
- $dir =~ s|[^/]+$|..|;
+ use SL::System::Process;
+ $exe_dir = SL::System::Process::exe_dir;
- chdir($dir) || die "Cannot change directory to ${dir}\n";
+ unshift @INC, "${exe_dir}/modules/override"; # Use our own versions of various modules (e.g. YAML).
+ push @INC, "${exe_dir}/modules/fallback"; # Only use our own versions of modules if there's no system version.
+ unshift @INC, $exe_dir;
- unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML).
- push @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version.
+ chdir($exe_dir) || die "Cannot change directory to ${exe_dir}\n";
}
use CGI qw( -no_xhtml);
}
use CGI qw( -no_xhtml);
@@
-21,6
+24,8
@@
use Daemon::Generic;
use Data::Dumper;
use DateTime;
use English qw(-no_match_vars);
use Data::Dumper;
use DateTime;
use English qw(-no_match_vars);
+use File::Spec;
+use List::Util qw(first);
use POSIX qw(setuid setgid);
use SL::Auth;
use SL::DB::BackgroundJob;
use POSIX qw(setuid setgid);
use SL::Auth;
use SL::DB::BackgroundJob;
@@
-31,11
+36,18
@@
use SL::InstanceConfiguration;
use SL::LXDebug;
use SL::LxOfficeConf;
use SL::Locale;
use SL::LXDebug;
use SL::LxOfficeConf;
use SL::Locale;
+use SL::System::TaskServer;
our %lx_office_conf;
our %lx_office_conf;
+sub debug {
+ return if !$lx_office_conf{task_server}->{debug};
+ $::lxdebug->message(0, @_);
+}
+
sub lxinit {
sub lxinit {
- my $login = $lx_office_conf{task_server}->{login};
+ my $login = $lx_office_conf{task_server}->{login};
+ my $client = $lx_office_conf{task_server}->{client};
package main;
package main;
@@
-43,6
+55,7
@@
sub lxinit {
$::locale = Locale->new($::lx_office_conf{system}->{language});
$::form = Form->new;
$::auth = SL::Auth->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({}) };
$::instance_conf = SL::InstanceConfiguration->new;
$::request = { cgi => CGI->new({}) };
@@
-89,8
+102,9
@@
sub gd_preconfig {
SL::LxOfficeConf->read($self->{configfile});
SL::LxOfficeConf->read($self->{configfile});
- die "Missing section [task_server] in config file" unless $lx_office_conf{task_server};
- die "Missing key 'login' in section [task_server] in config file" unless $lx_office_conf{task_server}->{login};
+ die "Missing section [task_server] in config file" unless $lx_office_conf{task_server};
+ die "Missing key 'login' in section [task_server] in config file" unless $lx_office_conf{task_server}->{login};
+ die "Missing key 'client' in section [task_server] in config file" unless $lx_office_conf{task_server}->{client};
drop_privileges();
lxinit();
drop_privileges();
lxinit();
@@
-101,11
+115,11
@@
sub gd_preconfig {
sub gd_run {
while (1) {
my $ok = eval {
sub gd_run {
while (1) {
my $ok = eval {
-
$::lxdebug->message(0, "Retrieving jobs") if $lx_office_conf{task_server}->{debug}
;
+
debug("Retrieving jobs")
;
my $jobs = SL::DB::Manager::BackgroundJob->get_all_need_to_run;
my $jobs = SL::DB::Manager::BackgroundJob->get_all_need_to_run;
-
$::lxdebug->message(0, " Found: " . join(' ', map { $_->package_name } @{ $jobs })) if $lx_office_conf{task_server}->{debug} &&
@{ $jobs };
+
debug(" Found: " . join(' ', map { $_->package_name } @{ $jobs })) if
@{ $jobs };
foreach my $job (@{ $jobs }) {
# Provide fresh global variables in case legacy code modifies
foreach my $job (@{ $jobs }) {
# Provide fresh global variables in case legacy code modifies
@@
-113,21
+127,21
@@
sub gd_run {
$::locale = Locale->new($::lx_office_conf{system}->{language});
$::form = Form->new;
$::locale = Locale->new($::lx_office_conf{system}->{language});
$::form = Form->new;
+ chdir $exe_dir;
+
$job->run;
}
1;
};
$job->run;
}
1;
};
- if ($lx_office_conf{task_server}->{debug}) {
- $::lxdebug->message(0, "Exception during execution: ${EVAL_ERROR}") if !$ok;
- $::lxdebug->message(0, "Sleeping");
- }
+ debug("Exception during execution: ${EVAL_ERROR}") if !$ok;
+ debug("Sleeping");
my $seconds = 60 - (localtime)[0];
if (!eval {
local $SIG{'ALRM'} = sub {
my $seconds = 60 - (localtime)[0];
if (!eval {
local $SIG{'ALRM'} = sub {
-
$::lxdebug->message(0, "Got woken up by SIGALRM") if $lx_office_conf{task_server}->{debug}
;
+
debug("Got woken up by SIGALRM")
;
die "Alarm!\n"
};
sleep($seconds < 30 ? $seconds + 60 : $seconds);
die "Alarm!\n"
};
sleep($seconds < 30 ? $seconds + 60 : $seconds);
@@
-138,15
+152,19
@@
sub gd_run {
}
}
}
}
-my $cwd = getcwd();
-my $pidbase = "${cwd}/users/pid";
+chdir $exe_dir;
+
+mkdir SL::System::TaskServer::PID_BASE() if !-d SL::System::TaskServer::PID_BASE();
+
+my $file = first { -f } ("${exe_dir}/config/kivitendo.conf", "${exe_dir}/config/lx_office.conf", "${exe_dir}/config/kivitendo.conf.default");
+
+die "No configuration file found." unless $file;
-
mkdir($pidbase) if !-d $pidbase
;
+
$file = File::Spec->abs2rel(Cwd::abs_path($file), Cwd::abs_path($exe_dir))
;
-my $file = -f "${cwd}/config/lx_office.conf" ? "${cwd}/config/lx_office.conf" : "${cwd}/config/lx_office.conf.default";
newdaemon(configfile => $file,
newdaemon(configfile => $file,
- progname => 'kivitendo-
task-server
',
- pidbase =>
"${pidbase}/"
,
+ progname => 'kivitendo-
background-jobs
',
+ pidbase =>
SL::System::TaskServer::PID_BASE() . '/'
,
);
1;
);
1;