Пользовательское сообщение о состоянии службы Linux с использованием Java Service Wrapper
Я создаю отдельное приложение для запуска в качестве службы демона Linux (Ubuntu) с использованием Java. Для этого я использую Java Service Wrapper lib.
Во время выполнения сервиса я хотел бы иметь возможность запрашивать некоторый статус задач, выполняемых приложением. Другими словами, я хотел бы иметь возможность печатать собственное сообщение, когда я печатаю на терминале:
service my-app status
В настоящее время сообщение, которое он печатает, выглядит примерно так:
My App is running: PID:1000, Wrapper:STARTED, Java:STARTED
Я понимаю, что мне нужно использовать более сложный метод интеграции (нежели самый простой), но я не смог найти, как перехватить вызов "status", чтобы напечатать мое собственное сообщение.
Как я могу настроить это сообщение, используя Java Service Wrapper?
1 ответ
Я получил половину решения. Изучив код скрипта-оболочки, как предложено @Naytzyrhc, я обнаружил, что lib-оболочка читает 3 файла для создания сообщения о состоянии:
bin/my-app.pid
распечатать PID запущенного процесса;bin/my-app.status
распечатать статус самой обёртки;bin/my-app.java.status
распечатать статус завернутого приложения.
Итак, в коде приложения, чтобы переопределить сообщение о статусе, просто напишите сообщение в my-app.java.status
файл.
Есть только одна ошибка: если сообщение о состоянии содержит разрывы строк, service my-app status
не печатает их, потому что использует echo
команда (как указано в этом вопросе Захват многострочного вывода в переменную Bash). Чтобы решить эту проблему, просто измените строку с:
eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS'`
чтобы:
eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:"$JAVASTATUS"'`
(Используя двойные кавычки на $JAVASTATUS
).
Это полу-решение, потому что оно не запускает событие для запущенного приложения, как я хотел. Но это работает для настройки статуса сообщения: это зависит от приложения, как часто сообщение обновляется.