LINUX.ORG.RU
ФорумAdmin

systemd service conditional execution

 


0

1

Шалом, мужчины.

Подскажите, возможно средствами systemd выполнять определённую команду, если таймер срабатывает в определённый день, например, в субботу. В другие дни, команда должна выполняться другая.

Если да, то как? Спасибо :]


Сделать 2 таймера? Один срабатывает в субботу, другой в остальные дни.

Юниты systemd - это декларативный конфиг, в них нет синтаксиса для условных конструкций.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

нет синтаксиса для условных конструкций

В мане есть ExecCondition директива, но это немного не то, что мне нужно. Думал, может есть какие-нибудь способы, о которых не догадывался :-(

ubik
() автор топика

[ "$(date +%u)" -eq 6 ] && echo שבת‏‎ || echo work-work

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 3)
Ответ на: комментарий от ubik

Ну как это не то, если то? В одном юните исключаешь субботу, в другом - всё остальное.

Я бы просто просто сделал прослойку на каком-нибудь пайтоне, которая бы выбирала что запускать.

anonymous-angler ★☆
()
Ответ на: комментарий от anonymous-angler

мне нужен один юнит.

В итоге получилось такое:

[Unit]
Description=Foo %i

[Service]
Type=simple
Environment="SCRIPT_NAME=path/to/script_%i.py"
WorkingDirectory=/home/ubik/anal
ExecStartPre=/bin/bash -c '(( $(date +%u) < 5 )) && STREAM_T="3000 * 2" || STREAM_T="10*3*15"; sed -ri "s|^(stream_t[[:space:]]+=[[:space:]])[0-9*]+|\1$${STREAM_T}|" "${SCRIPT_NAME}"'
ExecStart=/home/ubik/anal/e.bash -s ${SCRIPT_NAME} -b ${BOOBS}
${BOOBS}

берётся из drop-in файла

Правда в journalctl есть такая строка:

systemd[1]: /etc/systemd/system/test@.service:12: Ignoring unknown escape sequences: "(( $(date +%u) < 5 )) && STREAM_T="3000 * 2" || STREAM_T="10*3*15"; sed -ri "s|^(stream_t[[:space:]]+=[[:space:]])[0-9*]+|\1$${STREAM_T}|" "${SCRIPT_NAME}""

Но скрипт модифицируется и запускается о_О

P.S. ещё узнал такую штуку:

The $$ in the string will become a single $ in the result passed to bash, but more importantly will stop ${…} from being interpolated by systemd. (Earlier versions of systemd did not document the use of $$, so I don’t know if it was supported then).

ubik
() автор топика
Последнее исправление: ubik (всего исправлений: 2)
Ответ на: комментарий от ubik

Способ, про который никто не догадывается это по таймеру запускать скрипт и там уже проверять все условия и выполнять нужную команду.

Но вообще не вижу причины не иметь 2 таймера.

vitruss ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.