Отложить службу systemd, если файл существует

Задайте точное имя из пункта меню как GRUB_DEFAULT, например Ubuntu, с Linux 4.4.0-62-generic (выскочка) , см .:

perl -lne "print \$1 if /menuentry '(.*?)'/" /boot/grub/grub.cfg
1
26.08.2017, 16:04
2 ответа

используя только один модуль

Поместите 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
6
27.01.2020, 23:18
[Service]
ExecStartPre=bash -c "while [ -f /path/to/file ]; do sleep 1; done"
ExecStart=your_command
0
03.11.2020, 12:23

Теги

Похожие вопросы