Acionar outra unidade do sistema para iniciar antes que a unidade temporizadora inicie?

2

Eu tenho um RPi3. Como ele não tem um relógio de hardware, eu tenho um serviço para tlsdate que sincroniza o tempo com um servidor local. (Isso é acionado em cada inicialização, regularmente, devido aos freqüentes cortes de energia).

Eu tenho mais um temporizador mysync.timer que inicia mysync.service que sincroniza meu calendário. Isso usa OAuth e, se houver uma incompatibilidade de horário, ocorrerá um erro.

Existe alguma maneira de iniciar o tlsdate.service antes de mysync.service , sempre que mysync.service é executado?

Eu olhei para a documentação do systemd e encontrei Before= e After= , mas não tenho certeza de como usar isso com timers.

    
por Karthik Nishanth 16.09.2017 / 11:38

1 resposta

5

Tudo o que você precisa fazer é adicionar After e Wants em mysync.service :

After=tlsdate.service
Wants=tlsdate.service

Isso fará com que tlsdate.service comece antes de mysync.service . Se você quiser ter certeza de que tlsdate foi concluído antes de mysync , convém garantir que tlsdate seja Type=oneshot , em vez do padrão Type=simple .

A distinção entre os dois é After especifica a ordem, se ambas forem iniciadas ao mesmo tempo, enquanto Wants faz com que tlsdate inicie quando mysync for iniciado. Então você precisa de ambos, para especificar a ordem e a dependência.

Se você quiser uma dependência difícil, ou seja, mysync deve falhar se tlsdate não puder ser iniciado, você deverá usar Requires :

After=tlsdate.service
Requires=tlsdate.service

Você deve poder ignorar o cronômetro completamente. O cronômetro iniciará mysync.service , mas o que você realmente quer é uma dependência em mysync.service que tlsdate.service é iniciada primeiro, independentemente de ser acionada por um timer ou não.

    
por 16.09.2017 / 12:27