Я пытаюсь определить, успешно ли запущен процесс для службы, запланированной как служба systemd-timers. У меня запланирована служба под названием certbot.service, которую я вижу с помощью systemctl list-timers. Где находится определение этой службы и как я могу определить процесс, который в конечном итоге будет запущен для этой службы?

0
Chris Halcrow 8 Сен 2021 в 03:52

1 ответ

Лучший ответ

Когда вы используете systemctl list-timers, вы перечисляете активные единицы *.timer.

Примере:

stew ~ $ systemctl list-timers
NEXT                         LEFT          LAST                         PASSED       UNIT                         ACTIVATES
Wed 2021-09-08 10:32:20 CEST 46min left    Wed 2021-09-08 09:32:47 CEST 13min ago    anacron.timer                anacron.service
Wed 2021-09-08 10:58:47 CEST 1h 12min left Wed 2021-09-08 04:35:18 CEST 5h 10min ago apt-daily.timer              apt-daily.service
Wed 2021-09-08 13:28:09 CEST 3h 41min left Tue 2021-09-07 13:28:09 CEST 20h ago      systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Wed 2021-09-08 15:40:34 CEST 5h 54min left Wed 2021-09-08 05:01:01 CEST 4h 45min ago fwupd-refresh.timer          fwupd-refresh.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       atop-rotate.timer            atop-rotate.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       exim4-base.timer             exim4-base.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       logrotate.timer              logrotate.service
Thu 2021-09-09 00:00:00 CEST 14h left      Wed 2021-09-08 00:00:01 CEST 9h ago       man-db.timer                 man-db.service
Thu 2021-09-09 06:20:05 CEST 20h left      Wed 2021-09-08 06:01:22 CEST 3h 44min ago apt-daily-upgrade.timer      apt-daily-upgrade.service
Sun 2021-09-12 03:10:53 CEST 3 days left   Sun 2021-09-05 03:10:52 CEST 3 days ago   e2scrub_all.timer            e2scrub_all.service

10 timers listed.
Pass --all to see loaded but inactive timers, too.

Вы можете видеть, что в столбце UNIT у нас есть единицы таймера (например, anacron.timer). Это фактический таймер, который вы перечисляете. Когда этот таймер сработает, он активирует другой юнит. Эта единица может быть указана в файле *.timer как Unit=anacron.service или по умолчанию является службой с тем же именем, что и у таймера, но с расширением .service. Это показано в столбце ACTIVATES.

Если вы хотите узнать, где установлен *.timer, используйте systemctl cat <unit>:

stew ~ $ systemctl cat anacron.timer
# /lib/systemd/system/anacron.timer
[Unit]
Description=Trigger anacron every hour

[Timer]
OnCalendar=*-*-* 07..23:30
RandomizedDelaySec=5m
Persistent=true

[Install]
WantedBy=timers.target

Что особенно полезно здесь, так это то, что он сообщает вам имя файла (файлов). Если у вас есть какие-либо выпадающие, они будут перечислены.

В вашем случае вас особенно интересует процесс, который запускается вашей службой. systemctl cat <unit> может помочь вам и в этом. Если я продолжу использовать anacron.service, вы получите:

stew ~ $ systemctl cat anacron.service
# /lib/systemd/system/anacron.service
...

[Service]
EnvironmentFile=/etc/default/anacron
ExecStart=/usr/sbin/anacron -d -q $ANACRON_ARGS
...

Вы можете видеть, что строка ExecStart= показывает команду, которая запускается для запуска службы.

Если вас интересует текущий статус, вы также можете увидеть его с помощью systemctl status <unit>:

stew ~ $ systemctl status anacron.service
● anacron.service - Run anacron jobs
...
     Active: inactive (dead) since Wed 2021-09-08 09:32:47 CEST; 23min ago
TriggeredBy: ● anacron.timer
    Process: 480643 ExecStart=/usr/sbin/anacron -d -q $ANACRON_ARGS (code=exited, status=0/SUCCESS)
   Main PID: 480643 (code=exited, status=0/SUCCESS)
...

Здесь вы можете увидеть, когда служба в последний раз была завершена, использованная команда ExecStart=, PID и код выхода.

1
Stewart 8 Сен 2021 в 10:58
Один из лучших ответов, которые я видел - спасибо @Stewart;)
 – 
Chris Halcrow
10 Сен 2021 в 07:47