Я пытаюсь создать и установить на Бионическом пользовательскую пару systemd таймера и сервисных единиц для выполнения команды периодически. Я знаю, что файлы должны быть помещены в /etc/systemd/system
и затем я должен работать systemctl daemon-reload
, но я не ясен на том, должен ли я разрешить или запустить что-нибудь для таймера, который будет полностью установлен и "выполнение" и несколько статей, я могу найти, что обращаются к этой точке, которую все дают различной информации.
Мой .timer
файл:
[Unit]
Description=Run custom command periodically
[Timer]
Unit=my-custom-command.service
OnCalendar=*-*-* 0/8:00:00
[Install]
WantedBy=timers.target
Мой .service
файл:
[Unit]
Description=Run a custom command
OnFailure=mail-systemd-failure@%n.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/custom-command
User=dedicated-user
Group=dedicated-user
Конфликтующие статьи, которые я прочитал:
В этой статье говорится для выполнения:
systemctl daemon-reload
systemctl enable $NAME.timer
systemctl start $NAME
Насколько я понимаю последняя команда совпадает с systemctl start $NAME.service
, который я ожидал бы сразу выполнять команду, определенную сервисом, который не является тем, что я хочу сделать.
Эта суть говорит, чтобы просто работать:
systemctl daemon-reload
systemctl start $NAME.timer
В этой статье говорится для выполнения:
systemctl enable $NAME.timer
systemctl start $NAME.timer
Я включаю и/или запускаю таймер (или его сервис?), и каково точно различие между двумя? Команды я должен выполнить изменение в зависимости от того, установлены ли файлы единицы недавно или перезагружаемый после редактирования?
Для выполнения единицы в требуемое время или интервалы, Вам нужны две единицы:
Условно, единица таймера запускает другую единицу с того же имени, т.е. foo.timer
запускается foo.service
. Можно переопределить это путем определения Unit=other.service
атрибут в единице таймера (как Вы сделал).
Если и файлы единицы создаются и вставляются /etc/systemd/system
необходимо сделать systemd
зная о них путем издания
systemctl daemon-reload
Это делает systemd
перезагрузите все файлы единицы и пересмотрите их зависимости потому что systemd
кэширует эти файлы так или иначе. Таким образом каждый раз, когда Вы изменяете файл единицы, эта команда требуется.
После этого необходимо включить единицу таймера:
systemctl enable foo.timer
Это управляет, просто включает автоматический запуск во время начальной загрузки (но еще не запускает единицу). Не включайте сервисную единицу, потому что это означало бы запускать сервис во время начальной загрузки (независимый от любых настроек таймера).
Теперь в следующий раз, когда Вы загружаетесь, таймер будет занят. Для запуска его сразу (не загружаясь), Вы работали бы
systemctl start foo.timer
С этого времени единица таймера запустит сервисную единицу каждый раз, когда время настает. Можно объединить включение и запуск с
systemctl enable --now foo.timer
Вы можете (и если) оставляют сервисную единицу в покое, т.е. не включают и не запускают его. Это теперь обрабатывается единицей таймера.
Видеть текущий статус и таймера и сервиса, проблемы
systemctl status foo.timer foo.service
systemctl enable/disable
управляет поведением при начальной загрузкеsystemctl start/stop
управляет поведением прямо сейчасenable
не подразумевает start
(ни один не делает disable
подразумевать stop
). Это может быть переопределено с --now
переключатель.enable
и start
единица таймера, не сервисная единицаsystemctl daemon-reload
каждый раз, когда Вы редактируете файлы единицыДальнейшее чтение: