Member 13826016 Ответов: 2

Как написать программу для запуска всегда в linux server


как написать программу для запуска всегда в linux server?(например, сервер веб-искателя) У меня есть две проблемы для этого. 1.каков наилучший метод для запуска всегда моей программы? Я использую :
while(true) {
server = new SERVER();
}



является ли этот путь истинным или ложным?

2.как мой сервер всегда слушает ввод пользователя без паузы цикла в № 1 Например, используйте сканер для ввода пользователя, но этот метод паузы программы.

в заключение я хочу написать программу , которая установится на сервер linux и автоматизация будет работать без остановки.

Что я уже пробовал:

я попробовал поставить свой основной класс на некоторое время

2 Ответов

Рейтинг:
0

CPallini

Цитата:
в то время как(правда) {
сервер = новый сервер();
}
Это, скорее всего, ошибка: ваша программа продолжает создавать новые экземпляры сервера в бесконечном цикле.
Вероятно, вам придется создать один экземпляр сервера, который, в свою очередь, выполняет бесконечный цикл.


Цитата:
2.как мой сервер всегда слушает ввод пользователя без паузы цикла в № 1 Например, используйте сканер для ввода пользователя, но этот метод паузы программы.
Неблокирующий пользовательский ввод достигается с помощью нескольких потоков в вашем приложении. Смотрите, например: Многопоточность Java[^].


Цитата:
в заключение я хочу написать программу , которая установится на сервер linux и автоматизация будет работать без остановки.

Вы можете запустить свой сервер как службу Linux при запуске. Есть много учебных пособий, доступных в интернете, кричащих, как это сделать.


Member 13826016

TNX за ответ.
но это же не работа?!!
public SERVER() выдает исключение {
сканер = новый сканер(System.in);
Резьба Т = новый поток(новый Runnable() {
общественного недействительными Run() {
в то время как(правда) {
если(сканер.hasNextLine())
акт = сканер.строки().столоверчения();
}
}
});
Т.начать();

в то время как(правда) {
если(Деян."равно" ("старт"))
MainClass();
остальное, если (закон."равно" ("старт"))
print("стоп");
}

Member 13826016

вы сказали :"это, скорее всего, ошибка: ваша программа продолжает создавать новые экземпляры сервера в бесконечном цикле.
Вероятно, вам придется создать один экземпляр сервера, который, в свою очередь, выполняет бесконечный цикл."
можете ли вы показать в примерах коды?

Рейтинг:
0

Jochen Arndt

Программы, запускаемые и останавливаемые автоматически при запуске системы или отключении питания, называются службами. В Linux они называются демоны и контролируются системой сервисного управления (в основном systemd - Википедия[^] в наше время).

Чтобы остановить таких демонов, они должны быть в состоянии получить событие остановки и завершить себя. Это делается традиционно путем обращения с SIGTERM Сигнал POSIX (Сигнал (IPC) - Википедия[^]). Видеть Обработка сигналов и исключений[^] для Java.

Хотя не всегда необходимо предоставлять такой обработчик, рекомендуется выполнить правильное завершение работы, закрыв файлы и сокеты и завершив дочерние потоки.

Как сделать Java-демон с помощью start-stop-daemon - Леонид Шевцов[^] описывает, как запускать и останавливать Java-приложение в качестве демона.

Когда демон предоставляет какой-то вид Межпроцессная коммуникация - Википедия[^] который также может быть использован для обработки условий остановки.

Но такие демоны не привязаны к пользовательской оболочке, так что они не могут получить ввод с клавиатуры. Если приложение должно выполняться как демон и как обычное приложение, общим решением является использование аргумента командной строки для определения состояния выполнения. Это особенно полезно во время разработки.

Если приложение должно обрабатывать асинхронные события, такие как ввод с клавиатуры и прослушивание сетевых сокетов, не блокируя другие пути выполнения, они должны быть реализованы в собственных потоках. Это относится ко всем видам приложений.

Таким образом, вы должны были бы узнать о вышеупомянутых концепциях. Соответствующие ключевые слова веб-исследований могут быть, например, "javal linux daemon" и "java handle sigterm". Обработка событий ввода-вывода и использование потоков зависит от типа обрабатываемых асинхронных событий.