Eu tenho esse script que funciona:
#! /usr/bin/bash
export SEQVAL=$(date +%s) && sed -i "s/^SEQ1=.*$/SEQ1=${SEQVAL}/" /etc/environment
systemctl restart ccs-srvapp-telemetry.service
Não consigo fazer o que foi dito acima funcionar corretamente em um arquivo de unidade.
a última encarnação que tenho está abaixo, mas houve várias tentativas com várias configurações, todas falhando porque a variável não foi definida ou algo não escapou corretamente no comando sed.
[Unit]
Description=restarts fluent bit with a new SEQ1 to force a logrotate
After=network.target
[Service]
Type=oneshot
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/sh -c 'export SEQVAL=$(date +%s) && sed -i "s/^SEQ1=.*$/SEQ1=${SEQVAL}/" /etc/environment'
ExecStartPost=/bin/systemctl restart ccs-srvapp-telemety.service
[Install]
WantedBy=multi-user.target
Você precisa ter cuidado ao usar
$
nasExec
linhas, pois o systemd expandirá o formulário${variable}
onde quer que ele apareça, mesmo dentro de uma string entre aspas simples. Para evitar isso, escape o$
with$$
. Além disso,%
é usado para especificadores, então%s
é substituído pelo nome do shell. Escape o%
with%%
.mas isso também deve funcionar:
Além disso, tome cuidado, pois
ExecStartPost
os comandos podem ser iniciados antes doExecStart
comando terminar. Ele é iniciado quando o comando é iniciado. Se você quiser ter certeza de que o arquivo de ambiente foi atualizado, já que você está usandoType=oneshot
, você pode simplesmente ter váriasExecStart
linhas, e elas serão executadas sequencialmente.