opção jvm -Xloggc com% p no systemd.unit fornece o nome do arquivo incorreto do log [fechado]

2

Eu tenho um processo Java que desejo executar com a opção:

-Xloggc:/var/log/mylog_%p.gc.log

para que o nome do arquivo de log contenha o PID. Por exemplo, se o processo tiver PID 3498, o nome do arquivo de log será /var/log/mylog_pid3498.gc.log . Eu quero que o processo Java seja iniciado por um arquivo systemd unit . O arquivo da unidade é:

[Service]
User=ubuntu
Type=simple
WorkingDirectory=/home/ubuntu/my_code
ExecStart=/usr/bin/java -Xloggc:/var/log/mylog_%%p.gc.log -jar my_code.jar
Restart=always

Observe que usei o caractere %% para escapar do % . No entanto, isso não fornece o resultado esperado, pois concluo que o arquivo de log tem o nome /var/log/mylog_%p.gc.log , ou seja, o Java não pôde fazer a substituição de %p pelo PID real.

Alguma ideia? Obrigado!

Sistema operacional:

Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-1066-aws x86_64)

Versão Java:

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

versão systemd:

systemd 229
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN

UPDATE

systemctl show -p ExecStart --no-pager my_service
ExecStart={ path=/usr/bin/java ; argv[]=/usr/bin/java -Xloggc:/var/log/mylog_%%p.gc.log -jar my_code.jar ; ignore_errors=no ; start_time=[Tue 2018-11-27 17:08:43 UTC] ; stop_time=[n/a] ; pid=1664 ; code=(null) ; status=0/0 }
    
por elena 27.11.2018 / 16:00

0 respostas

Tags