Статус Systemctl показывает pids и информацию о хорошо законченном ExecStartPost ExecStartPre - PullRequest
0 голосов
/ 24 апреля 2020

Когда я спрашиваю о состоянии процесса myApp, иногда показываются pid ExecStartPost / ExecStartPre, но они успешно заканчиваются.

myapp.service - myapp
   Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: disabled)
   Active: active (running) since vie 2020-04-24 07:58:15 UTC; 7min ago
  Process: 93894 ExecStartPost=/bin/bash -c attempt=0; while ! $(grep "Server started ok" /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev) &>/dev/null); do echo "Waiting for %N startup trace"; sleep 1; ((attempt++)); if [ $attempt -gt $START_TIMEOUT ]; then echo "WARNING: %N startup trace not found at log"; break; fi done (code=exited, status=0/SUCCESS)
  Process: 93876 ExecStartPost=/bin/bash -c rm -f $(ls /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | cut -d"." -f2- | rev).restart* | sort -n | head -n -10 | cut -f 2-) || true (code=exited, status=0/SUCCESS)
  Process: 93844 ExecStartPre=/bin/bash -c cp /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev) /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | cut -d"." -f2- | rev).restart_$(date "+%%Y-%%m-%%dT%%H:%%M:%%S").log && truncate -s0 /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev) || true (code=exited, status=0/SUCCESS)
 Main PID: 93875 (java)
   CGroup: /system.slice/myapp.service
           └─93875 /usr/lib/jvm/jre-11-openjdk/bin/java --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAcc...

Но в других случаях он просто показывает мой pid процесса:

[root@server processes]# systemctl status myApp
●myApp.service - myApp
   Loaded: loaded (/etc/systemd/system/myApp.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-24 07:46:40 UTC; 19min ago
 Main PID: 88770 (java)
   CGroup: /system.slice/myApp.service
           └─88770 /usr/lib/jvm/jre-11-openjdk/bin/java --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dio.netty.tryReflectionSetAcc...

Интересно, почему иногда systemctl показывает их, а иногда нет.

Примечания:

С помощью ExecStartPre и ExecStartPost я определяю, имеет ли приложение java свой порт готов принимать петиции (java приложение распечатывает «Сервер запущен нормально» и вращает свой выходной журнал stdout. Этот вывод журнала был записан rsyslog conf, взяв трассировки из журнала сообщений и отправив их в файл журнала инициализации в / var / log

Мой файл .service:

[root@server processes]# cat /etc/systemd/system/myApp.service
[Unit]
Description=myApp
After=network.target

[Service]

EnvironmentFile=/etc/sysconfig/myApp
EnvironmentFile=-/etc/sysconfig/myApp.overwrite

# Copy init-XXX to init-XXX.restart_DATE.log and truncate original init-XXX to get info just from this restart
ExecStartPre=/bin/bash -c 'cp /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev) /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | cut -d"." -f2- | rev).restart_$(date "+%%Y-%%m-%%dT%%H:%%M:%%S").log\
&& truncate -s0 /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev)\
|| true'

ExecStart=/usr/lib/jvm/jre-11-openjdk/bin/java\
            $JAVA_OPT_COMMON\
            $JAVA_OPT_DEV\
            $JAVA_OPT_GC\
            $JAVA_LIMITS\
            $JAVA_DUMP_PATH\
            $LOGBACK\
            $CLASSPATH\
            $MAIN\
            $EXTRA_OPTS\
            -configuration $CONFIGURATION_PATH

# Remove init-XXX.restart_DATE.log keeping just 10
ExecStartPost=/bin/bash -c 'rm -f $(ls /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | cut -d"." -f2- | rev).restart* | sort -n | head -n -10 | cut -f 2-) || true'

ExecStartPost=/bin/bash -c 'attempt=0; while ! $(grep "Server started ok" /var/log/$(cat /etc/rsyslog.d/myRedirections.conf | grep %N | head -n 1 | rev | cut -d";" -f2 | cut -d"/" -f1 | rev) &>/dev/null); do echo "Waiting for %N startup trace"; sleep 1; ((attempt++)); if [ $attempt -gt $START_TIMEOUT ]; then echo "WARNING: %N startup trace not found at log"; break; fi done'

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=%N

User=m2m
Group=m2m
Type=simple
TimeoutSec=0
RestartSec=0

[Install]
WantedBy=multi-user.target

Мой rsyslog conf

если $ programname == 'myApp' then /var/log/init-myApp.log; if $ имя программы == 'myApp' затем ~;

...