Другой подход заключается в объединении нескольких элементов в один служебный файл (без таймера ). Элементы:
«самостоятельный -перезапуск» Type=oneshot
службы с директивой EnvironmentFile=/path/to/mlrpt-textfile
, которая считывает ваши параметры mlrpt для одного спутникового прохода, закодированные как настроенные varenvs из «текстового файла mlrpt -». Этими параметрами будут 1 )$START _TIME и 2 )$END _TIME для прохождения спутника, 3 )$DURATION прохода и 4 )$WAIT time до следующего прохода.
два текстовых файла. Один назывался, скажем, «список mlrpt -» с полным списком настраиваемых параметров mlrpt, похожим, но не идентичным вашему списку с 22 записями. Другой текстовый файл будет содержать только одну запись (, это «текстовый файл mlrpt -», упомянутый выше )
механизм (, включающий простой сценарий ), который считывает первую запись из начала списка «mlrpt -», копирует ее в «текстовый файл mlrpt -», затем удаляет первую запись в "mlrpt -list" и повторяет тот же процесс по запросу -до тех пор, пока не останется ни одной записи в "mlrpt -list" (примечание :копировать в "mlrpt -textfile" не следует добавить, но перезаписать ).
Теперь файл службы oneshot -должен выглядеть примерно так, как показано ниже, чтобы объединить все три элемента в одно рабочее решение. Основной причиной использования oneshot является его способность вмещать не только одну, но и несколько ExecStart=
директив. По замыслу директивы ExecStart
выполняются одна за другой. Это позволяет нам создать и запустить упомянутый выше «механизм» с помощью одного единственного сервисного модуля.
# /etc/systemd/system/myservice.service
[Unit]
Description=my service Service
ConditionPathExists=/path/to/mlrpt-textfile # contains $START_TIME, $END_TIME, $WAIT,
# and $DURATION for a single pass
ConditionFileNotEmpty=/path/to/mlrpt-textfile
EnvironmentFile=/path/to/mlrpt-textfile
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mlrpt $START_TIME-$END_TIME -t $DURATION
ExecStart=/bin/sleep $WAIT
ExecStart=/path/to/script # script copies one entry from mlrpt-list to mlrpt-textfile
ExecStopPost=/bin/systemctl restart myservice.service
[Install]
Конечно, это требует дополнительной обработки, (например. зависимости должны быть добавлены по мере необходимости ). Сценарий также следует использовать для сбоя службы после последнего прохода, например, путем стирания записи в «текстовом файле mlrpt -» после последнего прохода (, чтобы ConditionFileNotEmpty
не работал при перезапуске ).