используя только один модуль
Поместите TimeoutStartSec=infinity
в файл модуля и настройте ExecStart=
с помощью сценария, подобного
#! /bin/bash
TIMEOUT=1000
test -f /path/to/testfile && sleep "$TIMEOUT"
exec /path/to/service/binary plus arguments
Это невозможно сделать (полезным способом ) с ExecStartPre=
, см. man systemd.service
:
Обратите внимание, что ExecStartPre= нельзя использовать для запуска долго выполняющихся процессов. Все процессы, разветвленные процессами, вызванными через ExecStartPre=, будут уничтожены до запуска следующего сервисного процесса.
использование вспомогательного модуля
Если вы хотите сделать это только с помощью systemd, вы можете создать вспомогательный модуль check_and_wait.target
. Этот получает записи
# check_and_wait.target
[Unit]
TimeoutStartSec=infinity
ConditionPathExists=/path/to/testfile
ExecStart=/usr/bin/sleep 1000
RemainAfterExit=yes
Основной блок получает следующие записи:
Wants=check_and_wait.target
After=check_and_wait.target