LINUX.ORG.RU

Как правильно написать service файл для запуска java процесса?

 , ,


0

4

Господа, вопрос, надо написать service файл , для запуска JAVA процесса, вроде всё работает, но ощущение будто systemctl не получается какого то нужного ему ответа от скрипта и киляет процесс. # cat airvideoserver.service

[Unit]
Description=AirVideoServer
After=syslog.target
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/java -jar /usr/local/AirVideo/AirVideoServerLinux.jar /usr/local/AirVideo/airvideoserver.conf > /dev/null 2>&1 &
User=root
ExecStop=/bin/kill -TERM $MAINPID
TimeoutSec=300

[Install]
WantedBy=multi-user.target
После systemctl start airvideoserver консоль повисает, процесс работает примерно минуту, после чего в консоле появляется Job for airvideoserver.service failed. See 'systemctl status airvideoserver.service' and 'journalctl -xn' for details. и процесс умирает. Смотрю журнал, вижу нормальбную работу Java приложения, после чего «airvideoserver.service operation timed out. Terminating.»
# journalctl -xn
-- Logs begin at Вс 2014-11-30 11:49:37 MSK, end at Вс 2014-11-30 12:05:44 MSK. --
ноя 30 12:05:21 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1179 fps= 27 q=20.0 size=   13108kB time=47.13 bitrate=2278.4kbits/s dup=0 drop=3
ноя 30 12:05:26 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1316 fps= 27 q=22.0 size=   14871kB time=52.84 bitrate=2305.3kbits/s dup=0 drop=3
ноя 30 12:05:31 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1453 fps= 27 q=25.0 size=   16702kB time=58.56 bitrate=2336.5kbits/s dup=0 drop=3
ноя 30 12:05:36 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1607 fps= 27 q=25.0 size=   18682kB time=64.98 bitrate=2355.2kbits/s dup=0 drop=3
ноя 30 12:05:42 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1758 fps= 27 q=22.0 size=   20646kB time=71.28 bitrate=2372.8kbits/s dup=0 drop=3
ноя 30 12:05:44 airvideoserver.korphome.local systemd[1]: airvideoserver.service operation timed out. Terminating.
ноя 30 12:05:44 airvideoserver.korphome.local java[2801]: DEBUG: SegmentedEncoder: frame= 1917 fps= 28 q=25.0 size=   22708kB time=77.91 bitrate=2387.7kbits/s dup=0 drop=3
ноя 30 12:05:44 airvideoserver.korphome.local systemd[1]: airvideoserver.service: control process exited, code=exited status=143
ноя 30 12:05:44 airvideoserver.korphome.local systemd[1]: Failed to start AirVideoServer.
Какого ответа от скрипта systemd не хватает?



Последнее исправление: cetjs2 (всего исправлений: 3)

А зачем ты написал «> /dev/null 2>&1 &» ?

«User=root» и «ExecStop=/bin/kill -TERM $MAINPID» тоже бессмысленные.

alpha ★★★★★
()
Ответ на: комментарий от alpha

Строку запуска самого приложения брал из своего старого init-скрипта

KorP
() автор топика
Ответ на: комментарий от derlafff
 systemctl status airvideoserver.service
airvideoserver.service - AirVideoServer
   Loaded: loaded (/usr/lib/systemd/system/airvideoserver.service; disabled)
   Active: failed (Result: exit-code) since Вс 2014-11-30 16:29:39 MSK; 14min ago
  Process: 6981 ExecStart=/usr/bin/java -jar /usr/local/AirVideo/AirVideoServerLinux.jar /usr/local/AirVideo/airvideoserver.conf (code=exited, status=143)

ноя 30 16:28:09 airvideoserver.korphome.local java[6981]: DEBUG: SnapshotCache: Initializing Thumbnail Cache; Java Version: 1.7.0_71
ноя 30 16:28:09 airvideoserver.korphome.local java[6981]: DEBUG: SnapshotCache: Loaded existing Snapshot Index BTree with with 1 items.2014-11-30 16:28:09.365::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
ноя 30 16:28:09 airvideoserver.korphome.local java[6981]: 2014-11-30 16:28:09.411::INFO:  jetty-6.1.x
ноя 30 16:28:09 airvideoserver.korphome.local java[6981]: 2014-11-30 16:28:09.482::INFO:  Started SocketConnector@0.0.0.0:45631
ноя 30 16:28:09 airvideoserver.korphome.local java[6981]: DEBUG: PortMapperAction: Scheduling task PortMapperAction$2 (1283164450)
ноя 30 16:29:38 airvideoserver.korphome.local systemd[1]: airvideoserver.service operation timed out. Terminating.
ноя 30 16:29:39 airvideoserver.korphome.local java[6981]: DEBUG: StatusReportAction: Scheduling task StatusReportAction$2 (522593820)
ноя 30 16:29:39 airvideoserver.korphome.local systemd[1]: airvideoserver.service: control process exited, code=exited status=143
ноя 30 16:29:39 airvideoserver.korphome.local systemd[1]: Failed to start AirVideoServer.
ноя 30 16:29:39 airvideoserver.korphome.local systemd[1]: Unit airvideoserver.service entered failed state.

те как я писал в посте - приложение запускается, работает, а потом systemd говорит - Failed to start и убивает процесс

KorP
() автор топика
Ответ на: комментарий от powerguy

Попробуй type сменить на oneshot и убрать таймаут.

oneshot — это совсем другое, пусть просто попробует убрать таймаут

derlafff ★★★★★
()
Ответ на: комментарий от derlafff

И без него пробовал, сейчас оставил минимум

[Unit]
Description=AirVideoServer
After=syslog.target
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/java -jar /usr/local/AirVideo/AirVideoServerLinux.jar /usr/local/AirVideo/airvideoserver.conf

[Install]
WantedBy=multi-user.target

KorP
() автор топика
Ответ на: комментарий от derlafff

Да, всё тоже самое, будто systemd не понимает что приложение запустилось.

KorP
() автор топика
Ответ на: комментарий от KorP

Что происходит, если запустить это из терминала? Оно форкается и уходит в фон или остаётся висеть в форграунде?

intelfx ★★★★★
()
Ответ на: комментарий от KorP

Понятно.

Сейчас только что проверил с alpha6 сборкой этой софтины (и тестовым конфигом) — всё работает. Арч, версия 217.

Запусти с помощью systemctl start --no-block airvideoserver, тут же сделай systemctl status airvideoserver и приведи вывод.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Ну по --no-block после запуска консоль отпустило, смотрел статус - приложение спокойно проработало полторы минуты и опять убилось:

ноя 30 17:21:15 airvideoserver.korphome.local systemd[1]: airvideoserver.service operation timed out. Terminating.
ноя 30 17:21:16 airvideoserver.korphome.local java[7043]: DEBUG: Thumbnail:   Metadata:
ноя 30 17:21:16 airvideoserver.korphome.local systemd[1]: airvideoserver.service: control process exited, code=exited status=143
ноя 30 17:21:16 airvideoserver.korphome.local systemd[1]: Failed to start AirVideoServer.
ноя 30 17:21:16 airvideoserver.korphome.local systemd[1]: Unit airvideoserver.service entered failed state.

KorP
() автор топика
Ответ на: комментарий от intelfx
airvideoserver.service - AirVideoServer
   Loaded: loaded (/usr/lib/systemd/system/airvideoserver.service; disabled)
   Active: activating (start) since Вс 2014-11-30 17:33:12 MSK; 26s ago
  Control: 7093 (java)
   CGroup: /system.slice/airvideoserver.service
           ├─7093 java -jar /usr/local/AirVideo/AirVideoServerLinux.jar /usr/local/AirVideo/airvideoserver.conf
           └─7120 /usr/bin/ffmpeg --segment-length 4 --segment-offset 0 --conversion-id bb366c98-4bf2-4585-b355-0195b03e0e6af842a05a-a1d2-49f0-b8d2-ee63214d1dd8 --port-number 46631 -threads 4 -flags2 +fast -flags +loop -g 30 -keyint_min 1 -bf 0 -b_strategy 0 -flags2 -wpred-dct8x8 -cmp +chroma -debloc...

ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder:     Metadata:
ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder:       title           : DUB
ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: Stream mapping:
ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder:   Stream #0.0 -> #0.0
ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder:   Stream #0.1 -> #0.1
ноя 30 17:33:19 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: Press ctrl-c to stop encoding
ноя 30 17:33:20 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: Input stream #0.1 frame changed from rate:48000 fmt:s16 ch:6 to rate:48000 fmt:s16 ch:2
ноя 30 17:33:25 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: frame=   29 fps=  0 q=0.0 size=       0kB time=1.49 bitrate=   0.0kbits/s
ноя 30 17:33:30 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: frame=  220 fps= 39 q=19.0 size=    1520kB time=7.13 bitrate=1746.1kbits/s
ноя 30 17:33:35 airvideoserver.korphome.local java[7093]: DEBUG: SegmentedEncoder: frame=  360 fps= 33 q=20.0 size=    3337kB time=12.97 bitrate=2107.6kbits/s
KorP
() автор топика
Ответ на: комментарий от KorP

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

Ну man же!

TimeoutStartSec=
  … Pass 0 to disable the timeout logic. Defaults to 90s, except when Type=oneshot is used in which case the timeout is disabled by default.
MumiyTroll ★★★
()
Последнее исправление: MumiyTroll (всего исправлений: 1)
Ответ на: комментарий от MumiyTroll

Спасибо. А может быть ещё подскажите - что нужно что бы после старта сервиса в ручную, он консоль возвращал, а то так и остаётся висеть

KorP
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.