+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,
+  );
+
+  $::auth->restore_session;
+
+  $::form->{login} = $lx_office_conf{task_server}->{login};
+  $::instance_conf->init;
+
+  $::form->{__ERROR_HANDLER} = sub { die @_ };
+}
+
+sub drop_privileges {
+  my $user = $lx_office_conf{task_server}->{run_as};
+  return unless $user;
+
+  my ($uid, $gid);
+  while (my @details = getpwent()) {
+    next unless $details[0] eq $user;
+    ($uid, $gid) = @details[2, 3];
+    last;
+  }
+  endpwent();
+
+  if (!$uid) {
+    print "Error: Cannot drop privileges to ${user}: user does not exist\n";
+    exit 1;
+  }
+
+  if (!setgid($gid)) {
+    print "Error: Cannot drop group privileges to ${user} (group ID $gid): $!\n";
+    exit 1;
+  }
+
+  if (!setuid($uid)) {
+    print "Error: Cannot drop user privileges to ${user} (user ID $uid): $!\n";
+    exit 1;
+  }
+}
+
+sub notify_on_failure {
+  my (%params) = @_;
+
+  my $cfg = $lx_office_conf{'task_server/notify_on_failure'} || {};
+
+  return if any { !$cfg->{$_} } qw(send_email_to email_from email_subject email_template);
+
+  chdir $exe_dir;
+
+  return debug("Template " . $cfg->{email_template} . " missing!") unless -f $cfg->{email_template};
+
+  my $email_to = $cfg->{send_email_to};
+  if ($email_to !~ m{\@}) {
+    my %user = $::auth->read_user(login => $email_to);
+    return debug("cannot find user for notification $email_to") unless %user;
+
+    $email_to = $user{email};
+    return debug("user for notification " . $user{login} . " doesn't have a valid email address") unless $email_to =~ m{\@};
+  }
+
+  my $template  = Template->new({
+    INTERPOLATE => 0,
+    EVAL_PERL   => 0,
+    ABSOLUTE    => 1,
+    CACHE_SIZE  => 0,
+  });
+
+  return debug("Could not create Template instance") unless $template;
+
+  $params{client} = $::auth->client;
+
+  my $body;
+  $template->process($cfg->{email_template}, \%params, \$body);
+
+  Mailer->new(
+    from         => $cfg->{email_from},
+    to           => $email_to,
+    subject      => $cfg->{email_subject},
+    content_type => 'text/plain',
+    charset      => 'utf-8',
+    message      => Encode::decode('utf-8', $body),
+  )->send;
+}
+