Я понятия не имею, с чего начать поиски. Я читал о демонах и не понял концепцию.
Более подробная информация:
- Я написал сканер, который никогда не останавливается и сканирует RSS в Интернете.
- Сканер написан на Java, поэтому сейчас это jar.
- Я администратор на машине с Ubuntu 11.04.
- Существует некоторая вероятность сбоя машины, поэтому я бы хотел, чтобы сканер запускался каждый раз при запуске машины.
- Более того, я бы хотел, чтобы он продолжал работать, даже когда я вышел из системы. Я не уверен, что это возможно, но большую часть времени я выхожу из системы, и я все равно хочу, чтобы он ползал.
Есть идеи? Может кто-нибудь указать мне правильное направление?
Просто ищу самое простое решение.
решение1
Вот простой способ сделать это с помощью SysVInit. Инструкции:
Создайте скрипт запуска и остановки вашего приложения. Поместите его в какой-нибудь каталог, в нашем примере это:
- Запустить скрипт:
/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
- Запустить скрипт:
Создайте следующий скрипт (
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
Поместите скрипт в систему (используя 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 быстрых предложения...
СоздатьС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.Процесс, запущенный пользователем,
crond
должен сохраняться между выходами из системы. Возможно, добавьте его в свой crontab.Процесс, запущенный с помощью,
nohup
также должен сохраняться. Смотритеnohup: выполнить команду даже после выхода из системы.$ nohup java -jar myapp.jar &
По умолчанию
myapp.jar
стандартный вывод будет направляться в файл с именем./nohup.out
, или$HOME/nohup.out
, если первый недоступен для записи.
решение4
Простые скрипты запуска с проверкой версии Java для Linuxauth-агент и окнаauth-agent.bat