2

У меня есть RPi3. Поскольку у него нет аппаратных часов, у меня есть служба для tlsdate которая синхронизирует время с локальным сервером. (Это срабатывает при каждой загрузке. Регулярно из-за частых отключений питания).

У меня есть еще один таймер mysync.timer который запускает mysync.service который синхронизирует мой календарь. Это использует OAuth и, если есть несоответствие времени, оно выдает ошибку.

Есть ли способ запустить tlsdate.service перед mysync.service , каждый раз, когда запускается mysync.service ?

Я посмотрел на документацию по systemd и нашел Before= и After= , но я не уверен, как использовать это с таймерами.

1 ответ1

5

Все, что вам нужно сделать, это добавить After и Wants в mysync.service:

After=tlsdate.service
Wants=tlsdate.service

Это заставит tlsdate.service начаться до mysync.service Если вы хотите быть уверены, что tlsdate завершился до mysync , вы можете убедиться, что tlsdate имеет Type=oneshot , в отличие от значения по умолчанию Type=simple .

Различие между ними: After указывает порядок, если оба запускаются одновременно, а Wants заставляет tlsdate запускаться при запуске mysync . Таким образом, вам нужно и то, и другое, чтобы указать порядок и зависимость.


Если вы хотите иметь жесткую зависимость, то есть mysync должен завершиться сбоем, если tlsdate не может быть запущен, тогда вы должны использовать Requires:

After=tlsdate.service
Requires=tlsdate.service

Вы должны быть в состоянии полностью игнорировать таймер. Таймер начнет mysync.service но то , что вы действительно хотите это зависимость в mysync.service , что tlsdate.service запускается первым, независимо от того, является ли это срабатывает через таймер или нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .