private void copyLogTail() {
    if (configuration.getTailLogLinesToSave() <= 0) {
      return;
    }

    final Path tailOfLogPath =
        taskDefinition.getTaskDirectoryPath().resolve(configuration.getServiceFinishedTailLog());

    if (Files.exists(tailOfLogPath)) {
      log.debug("{} already existed, skipping tail", tailOfLogPath);
      return;
    }

    final List<String> cmd =
        ImmutableList.of(
            "tail",
            "-n",
            Integer.toString(configuration.getTailLogLinesToSave()),
            taskDefinition.getServiceLogOut());

    try {
      new SimpleProcessManager(log).runCommand(cmd, Redirect.to(tailOfLogPath.toFile()));
    } catch (Throwable t) {
      log.error(
          "Failed saving tail of log {} to {}",
          taskDefinition.getServiceLogOut(),
          configuration.getServiceFinishedTailLog(),
          t);
    }
  }
 private void ensureServiceOutExists() {
   try {
     if (!Files.exists(taskDefinition.getServiceLogOutPath())) {
       Files.createFile(taskDefinition.getServiceLogOutPath());
     }
   } catch (FileAlreadyExistsException faee) {
     log.debug("Executor out {} already existed", taskDefinition.getServiceLogOut());
   } catch (Throwable t) {
     log.error("Failed creating executor out {}", taskDefinition.getServiceLogOut(), t);
   }
 }
  private boolean writeTailMetadata(boolean finished) {
    if (!taskDefinition.getExecutorData().getLoggingTag().isPresent()) {
      if (!finished) {
        log.warn("Not writing logging metadata because logging tag is absent");
      }
      return true;
    }

    final TailMetadata tailMetadata =
        new TailMetadata(
            taskDefinition.getServiceLogOut(),
            taskDefinition.getExecutorData().getLoggingTag().get(),
            taskDefinition.getExecutorData().getLoggingExtraFields(),
            finished);
    final Path path =
        TailMetadata.getTailMetadataPath(
            configuration.getLogMetadataDirectory(),
            configuration.getLogMetadataSuffix(),
            tailMetadata);

    return jsonObjectFileHelper.writeObject(tailMetadata, path, log);
  }