Пользовательское сообщение о состоянии службы 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 файла для создания сообщения о состоянии:

  1. bin/my-app.pid распечатать PID запущенного процесса;
  2. bin/my-app.status распечатать статус самой обёртки;
  3. 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).

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

Другие вопросы по тегам