Crontab не запускает запланированное задание - PullRequest
0 голосов
/ 02 мая 2018

У меня есть Java-программа, которая читает текстовые файлы и обрабатывает их последовательно, и по завершении каждого файла почта запускается в отдельном потоке (используя runnable). Я настроил эту программу как задание cron в crontab для запуска каждые 15 минут.

Cron не запускается, если дочерняя нить последнего запуска задания занимает более 20 минут для отправки электронного письма. Как можно запускать задание каждые 15 минут, даже если последний дочерний поток все еще выполняется?

Ниже используется код:

EpdFeedLoader.java

public class EpdFeedLoader {
    public static void main(String[] args) throws Exception {
        startProcess(feedFile);
    }

    public static void startProcess(BatchFeedFile feedFile) {
        EpdBatchLoader epdBatchLoader = new EpdBatchLoader(feedFile);
        epdBatchLoader.execute();
    }
}

EpdBatchLoader.java

public class EpdBatchLoader {
    private static void sendDelayedFeedEmail(){
        SendDelayedFeedJobStatusMail delayedFeedEmail = new SendDelayedFeedJobStatusMail();
        delayedFeedEmail.setParameters(//parameters for my email method);
        Thread delayedFeedThread =  new Thread(delayedFeedEmail);
        delayedFeedThread.start();
    }
}

SendDelayedFeedJobStatusMail.java

public class SendDelayedFeedJobStatusMail implements Runnable {

    private MailRequestDTO mailRequestDTO;

    public void setParameters(MailRequestDTO mailRequestDTO){
        this.mailRequestDTO = mailRequestDTO;
    }

    public void sendMail() {
        boolean isSend = false;
        message.setSubject(subject);
        message.setSentDate(Utils.getDateInTimeZone(mailRequestDTO.getCountryCode(),new Date()));
        message.setContent(mailRequestDTO.getMessageContent(), "text/html");
        message.addHeader("Content-Transfer-Encoding", "7bit");
        attachInlineImages(message, mailRequestDTO.getInlineImageMap()); 
        ConfigUtils.logger.info("Ready to Send Delayed Feed Receipt Email for Process Code : " +  mailRequestDTO.getProcessCode().toString());
        Transport.send(message);
        isSend = true;
        ConfigUtils.logger.info("Delayed Feed Receipt Email Sent Successfully for Process Code : " +  mailRequestDTO.getProcessCode().toString());
    }   

    @Override
    public void run(){
        this.sendMail();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...