Как можно запустить системный systemd-unit после выполнения пользовательского юнита, который запускается по расписанию?

Как настроить запуск другого сервиса после завершения выполнения первого сервиса, запущенного по расписанию при помощи systemd?
  • 3 августа 2024 г. 15:53
Ответы на вопрос 2
1. Для того чтобы запустить системный systemd-unit после выполнения пользовательского юнита, который запускается по расписанию, можно воспользоваться директивой `After` в конфигурационном файле юнита. Например, если у вас есть пользовательский юнит `my_custom_unit.service` и системный юнит `system_unit.service`, который должен быть запущен после выполнения первого, можно добавить в конфигурационные файлы следующие строки:

В пользовательском юните `my_custom_unit.service`:
```
[Unit]
Description=My Custom Unit

[Service]
Type=simple
ExecStart=/path/to/your/script.sh

[Install]
WantedBy=default.target
```

В системном юните `system_unit.service`:
```
[Unit]
Description=System Unit
After=my_custom_unit.service

[Service]
Type=simple
ExecStart=/path/to/your/system_script.sh

[Install]
WantedBy=default.target
```

Таким образом, юнит `system_unit.service` будет запущен после выполнения пользовательского юнита `my_custom_unit.service`.

2. Для настройки запуска другого сервиса после завершения выполнения первого сервиса, запущенного по расписанию, также можно воспользоваться директивой `After`. Например, если у вас есть сервис `first_service.service`, который запускается по расписанию, и вы хотите запустить сервис `second_service.service` после его завершения, можно добавить следующие строки в конфигурационные файлы:

В первом сервисе `first_service.service`:
```
[Unit]
Description=First Service

[Service]
Type=simple
ExecStart=/path/to/your/first_script.sh

[Install]
WantedBy=default.target
```

Во втором сервисе `second_service.service`:
```
[Unit]
Description=Second Service
After=first_service.service

[Service]
Type=simple
ExecStart=/path/to/your/second_script.sh

[Install]
WantedBy=default.target
```

Таким образом, сервис `second_service.service` будет запущен после завершения сервиса `first_service.service`, который запускается по расписанию.
нужен именно отдельный скрипт ?? 

можно прописать в скрипт ExecStartPost он гарантированно запустится после ExecStart

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

If more than one command is specified, the commands are invoked sequentially in the order they appear in the unit file. If one of the commands fails (and is not prefixed with "-"), other lines are not executed, and the unit is considered failed.

вообще небольшой баш.скрипт можно полностью переписать на системд.сервис.
Похожие вопросы