Como distinguir entre a unidade do systemd executada manualmente ou pelo temporizador?

1

Eu quero distinguir entre systemd unit run por systemd timer ou invocado manualmente com systemctl. Ou seja para verificar se o backup é acionado como trabalho periódico por agendamento ou se é feito "sob demanda".

O que eu encontrei até agora:

  • não há lugar para definir variáveis de ambiente em unidades de timer?)
  • o ambiente transmitido à unidade é o mesmo, independentemente de ser acionado pelo cronômetro ou manualmente

A execução de invocações periódicas e manuais através do systemd parece ser mais conveniente do que colocar nota em MOTD "Para operações agendadas, são utilizados temporizadores systemd, para trabalhos manuais, usar scripts em / usr / local / bin";)

Você tem alguma idéia (além de unidade de instanciação e cópia de unidade com ambiente diferente para uso manual)?

    
por Wheart 08.02.2018 / 16:21

1 resposta

0

mas aqui está uma maneira simples de passar argumentos do seu cronômetro para sua unidade, e isso é usar modelos

exemplo

crie um serviço com @ i o nome

/etc/systemd/system/[email protected]

   [Unit]

   Description=test

   [Service]
   ExecStart=/bin/echo 'hello from %i'

o seu temporizador pode ser algo como

/etc/systemd/system/me.timer

[Unit]
Description=timer for me

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s
[email protected]

[Install]
WantedBy=multi-user.target

você vê que agora o que quer que você passe depois que o @ se tornará %i no seu arquivo de serviço. então agora você só

[~] sudo systemctl daemon-reload 
[~] sudo systemctl start me.timer
[~] sudo systemctl status [email protected][email protected] - test
   Loaded: loaded (/etc/systemd/system/[email protected]; static; vendor preset: enabled)
   Active: active (running) since Thu 2018-02-08 19:35:38 PST; 7ms ago
 Main PID: 8899 (echo)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/system-me.slice/[email protected]

Feb 08 19:35:38 algx systemd[1]: Started test.
Feb 08 19:35:38 algx echo[8899]: hello from timer

se você quiser iniciar a unidade a partir do cli, é só dar outro parâmetro depois do @

[~] sudo systemctl start me@cli
[~] sudo systemctl status [email protected]
✘  ~  sudo systemctl status [email protected][email protected] - test
   Loaded: loaded (/etc/systemd/system/[email protected]; static; vendor preset: enabled)
   Active: inactive (dead)

Feb 08 19:32:48 algx systemd[1]: Started test.
Feb 08 19:32:48 algx echo[8490]: hello from cli

Desta forma você tem uma clara distinção sobre o que é timer e o que é cli, mas você pode expandir isso para qualquer tipo de trigger ... você não mantém 2 arquivos unitários, mas você tem uma separação clara porque do ponto de vista do systemd são dois serviços diferentes.

    
por 09.02.2018 / 04:41

Tags