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

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

Я понятия не имею, с чего начать поиски. Я читал о демонах и не понял концепцию.

Более подробная информация:

  • Я написал сканер, который никогда не останавливается и сканирует RSS в Интернете.
  • Сканер написан на Java, поэтому сейчас это jar.
  • Я администратор на машине с Ubuntu 11.04.
  • Существует некоторая вероятность сбоя машины, поэтому я бы хотел, чтобы сканер запускался каждый раз при запуске машины.
  • Более того, я бы хотел, чтобы он продолжал работать, даже когда я вышел из системы. Я не уверен, что это возможно, но большую часть времени я выхожу из системы, и я все равно хочу, чтобы он ползал.

Есть идеи? Может кто-нибудь указать мне правильное направление?

Просто ищу самое простое решение.

решение1

Вот простой способ сделать это с помощью SysVInit. Инструкции:

  1. Создайте скрипт запуска и остановки вашего приложения. Поместите его в какой-нибудь каталог, в нашем примере это:

    • Запустить скрипт:/usr/local/bin/myapp-start.sh
    • Стоп-скрипт:/usr/local/bin/myapp-stop.sh

    Каждый из них предоставит инструкции по запуску/остановке приложения. Например, myapp-start.shсодержимое может быть таким простым, как следующее:

    #!/bin/bash
    
    java -jar myapp.jar 
    

    Для сценария остановки это может быть что-то вроде этого:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
    
  2. Создайте следующий скрипт ( myscript) и поместите его на /etc/init.d.

    /etc/init.d/myscriptсодержание:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
    
  3. Поместите скрипт в систему (используя SysV). Просто выполните следующую команду (как корень):

    update-rc.d myscript defaults 
    

PS: Я знаю, что Upstart великолепен и т. д., но я предпочитаю старую систему инициализации SysV.

решение2

Да, это возможно. :)Выскочкаэто способ убедиться, что служба продолжает работать. Он имеет пять пакетов, все установлены по умолчанию:

  • Демон инициализации Upstart и утилита initctl
  • upstart-logd предоставляет демон logd и файл определения задания для службы logd
  • upstart-compat-sysv предоставляет файлы определения заданий для задач rc и инструментов перезагрузки, уровня запуска, выключения и telinit, которые обеспечивают совместимость с SysVinit
  • startup-tasks предоставляет файлы определения заданий для задач запуска системы
  • system-services предоставляет файлы определения заданий для служб tty

Обучение очень приятное и того стоит. У Upstart есть сайт:http://upstart.ubuntu.com/

решение3

3 быстрых предложения...

  1. СоздатьСtart-скрипт в /etc/rc3.d(многопользовательский консольный режим) с соответствующимКскрипты ill в /etc/rc.0и /etc/rc6.dдля контролируемого завершения вашей программы Java при выключении системы (уровень запуска 0) или перезагрузке (уровень запуска 6) СмотритеВведение в уровни запуска.

    Вы можете запустить свое приложение Java на уровне выполнения 2 (rc2.d), но, как краулер, ему понадобится TCP/IP. Поэтому заранее убедитесь, что ваша сетевая служба доступна/запущена на уровне выполнения 2. Сетевое взаимодействие определенно включено на уровне выполнения 3.

    /etc/init.dсодержит все фактические скрипты запуска/завершения. /etc/rcN.dКаталоги просто содержат ссылки на них, с префиксом S или K для их запуска или завершения соответственно, для каждого уровня выполнения N.

  2. Процесс, запущенный пользователем, crondдолжен сохраняться между выходами из системы. Возможно, добавьте его в свой crontab.

  3. Процесс, запущенный с помощью, nohupтакже должен сохраняться. Смотритеnohup: выполнить команду даже после выхода из системы.

    $ nohup java -jar myapp.jar &
    

    По умолчанию myapp.jarстандартный вывод будет направляться в файл с именем ./nohup.out, или $HOME/nohup.out, если первый недоступен для записи.

решение4

Простые скрипты запуска с проверкой версии Java для Linuxauth-агент и окнаauth-agent.bat

Связанный контент