Сценарий
У меня есть системный файл, который я хочу запустить условно, но только если для переменной среды ISCAPTUREPOD задано значение true.
У меня есть контейнеркоторый запускает две службы при запуске, но есть особый сценарий, когда я хочу, чтобы только одна из служб работала.Я передаю переменную окружения через Kubernetes, которую я хочу использовать, чтобы контролировать, запускается ли второй сервис или нет.У меня есть скрипт с именем iscapturepod.sh, который проверяет переменную среды, и он является частью оператора ExecStartPre.Я хочу, чтобы сценарий выполнялся успешно, если для переменной среды ISCAPTUREPOD задано значение "True", и произойдет сбой, если он не существует или для него установлено значение, отличное от "True".
Проблема:
Независимо от того, что я делаю, ExecStartPre не работает.Я даже пытался заставить сценарий сказать exit 0
.Это единственная вещь во всем сценарии только потому, что я хотел добиться успеха.Systemd по-прежнему не работает со статусом 209 / STDOUT.
Служба захвата Молоха:
[Unit]
Description=Moloch Capture
After=network.target
[Service]
Type=simple
Restart=on-failure
StandardOutput=tty
ExecStartPre= /bin/sh -c '/data/moloch/bin/iscapturepod.sh'
ExecStart=/bin/sh -c '/data/moloch/bin/moloch-capture -c MOLOCH_INSTALL_DIR/etc/config.ini ${OPTIONS} >> /data/moloch/logs/capture.log 2>&1'
LimitCORE=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
Сценарий
#!/bin/bash
# This script checks to see whether this pod is or is not a capture pod
# Kubernetes will pass the ISCAPTUREPOD variable as an environment variable with
# value True to those pods meant for capture and False for the viewer pod.
# This allows us to only use one container for both the viewer and capture pods
# The molochcapture service will run this in an ExecStartPre statement. If it
# throws an error this will prevent the molochcapture service from starting
if [[ ! -z "${ISCAPTUREPOD}" ]]; then
if [[ "${ISCAPTUREPOD}" == "True" ]]; then
echo This is a capture pod
exit 0
else
echo This is not a capture pod 1>&2
exit 1
fi
else
echo This is not a capture pod 1>$2
exit 1
fi
Согласно этот сайт 0 должен быть успешным.Однако, даже если я изменил сценарий на exit 0
, я все равно получаю:
[root@sensor1 /]# systemctl status molochcapture
● molochcapture.service - Moloch Capture
Loaded: loaded (/usr/lib/systemd/system/molochcapture.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Mon 2019-01-21 12:58:20 UTC; 1s ago
Process: 281 ExecStartPre=/bin/sh -c /data/moloch/bin/iscapturepod.sh (code=exited, status=209/STDOUT)
Jan 21 12:58:20 sensor1.lan systemd[1]: Failed to start Moloch Capture.
Jan 21 12:58:20 sensor1.lan systemd[1]: Unit molochcapture.service entered failed state.
Jan 21 12:58:20 sensor1.lan systemd[1]: molochcapture.service failed.
Jan 21 12:58:20 sensor1.lan systemd[1]: molochcapture.service holdoff time over, scheduling restart.
Jan 21 12:58:20 sensor1.lan systemd[1]: Stopped Moloch Capture.
Jan 21 12:58:20 sensor1.lan systemd[1]: start request repeated too quickly for molochcapture.service
Jan 21 12:58:20 sensor1.lan systemd[1]: Failed to start Moloch Capture.
Jan 21 12:58:20 sensor1.lan systemd[1]: Unit molochcapture.service entered failed state.
Jan 21 12:58:20 sensor1.lan systemd[1]: molochcapture.service failed.
Я вручную проверил, что сценарий работает правильно и не имеет проблем.Kubernetes передает переменную среды, как и ожидалось, и сценарий возвращает «Это модуль захвата».Я подумал, что, возможно, это как-то связано с тем, что systemd не имеет доступа к STDOUT, но именно тогда я попытался просто exit 0
, но он все равно не удался.