Запустите Java-программу как планировщик без использования crontab - PullRequest
0 голосов
/ 06 января 2012

У меня есть основная программа, которая выполняет некоторые задачи на Java. Я хочу запустить его как пакетное задание, и в соответствии с нашими правилами мне не разрешается использовать crontab, где я могу его настроить.

Какой альтернативный вариант для меня? Как я могу запланировать запуск своей Java-программы один раз в день ??

Любой пример кода обертки будет полезен!

Спасибо!

Ответы [ 6 ]

3 голосов
/ 06 января 2012

вы можете использовать at - выполнить команды позднее
и / или объединить их с sleep - задержка на указанное количество времени
в цикле, работающем в фоновом режиме

, например, скажем, у вас есть следующий скрипт

#!/usr/bin/env bash
while true; do
    java -jar your.jar.file
    sleep 24h # wait one day
done

, запустите его как

bash script && disown &
2 голосов
/ 06 января 2012

... из-за наших правил я не могу использовать crontab, где я могу его настроить.

Ясно, что для этой политики должна быть какая-то причина, хотя неясно, что это. Любая альтернативная схема может потенциально нарушать те же рассуждения, которые заставили их запретить cron. (Конечно, некоторые из предложенных выше альтернатив, вероятно, будут хуже , чем cron.)

Лучше всего попросить людей, которые установили эту политику, сообщить вам одобренный способ назначения работы. Или, по крайней мере, попросите их объяснить, почему использование cron запрещено, чтобы вы имели представление о том, чего следует избегать в любой альтернативной схеме, которую вы придумали.

(Ладно, вполне возможно, что политика - это глупая реакция коленного рефлекса на какую-то проблему в прошлом. Но вам все еще нужно понять, в чем проблема ...)

2 голосов
/ 06 января 2012

Я не уверен, что вы хотите запланировать свою работу на Java или Bash. Если вы попытаетесь реализовать в Java, вы можете попытаться создать Thread для своей работы и позволить потоку спать в течение некоторого периода:

class repeatTask extends Thread
{
    int repeatTime;

    public repeatTask(int repeatTime)
    {
        this.repeatTime = repeatTime;
    }

    public void run()
    {
        while(true)
        {
            try {
                Thread.sleep(repeatTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            /* Some action codes here*/
        }
    }
}

А также вы можете использовать Timer класс, который также может позволить вам создать поток:

public void start()
{
    timerSchedule();            
}

public void timerSchedule()
{
    Timer timer = new Timer();

    timer.schedule(new TimerTask() {
        public void run() {
            /*Action codes here*/
        }
    }, /*Repeat Time here*/);
}
1 голос
/ 06 января 2012

Я большой поклонник cron4j для таких вещей: посмотрите, работает ли это для вас. Вы можете использовать это для планирования битов и просто запустить стандартную программу Java.

1 голос
/ 06 января 2012

Вы можете использовать задачи таймера Java

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/TimerTask.html

0 голосов
/ 06 января 2012

Вы также можете посмотреть на Кварцевый планировщик .Это форматы планирования очень похожи на crontab.

...