https://github.com/rustbas/systemd-unit-example
Пример службы systemd в рамках тестового задания
https://github.com/rustbas/systemd-unit-example
bash linux systemd
Last synced: 7 months ago
JSON representation
Пример службы systemd в рамках тестового задания
- Host: GitHub
- URL: https://github.com/rustbas/systemd-unit-example
- Owner: rustbas
- Created: 2025-05-18T07:32:37.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-06-09T23:28:06.000Z (9 months ago)
- Last Synced: 2025-06-10T00:26:23.891Z (9 months ago)
- Topics: bash, linux, systemd
- Language: Shell
- Homepage:
- Size: 13.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Пример службы systemd
В репозитории реализован пример службы `systemd` в рамках тестового задания.
## Принцип работы
1. Служба мониторит заданный процесс (см. "Установка службы").
2. Если процесс запущен, отправляется запрос по заданной конечной точке. Если
точка не доступна, то пишет в лог.
3. Если процесс был перезапущен, пишет об этом в лог.
4. Если процесса нет, то пишет в лог.
## Скрипт
Скрипт отправляет запрос со следующими данными:
- `name` -- имя процесса
- `PID` -- PID процесса
- `date` -- время выполнения скрипта в формате `YYYY-mm-ddTHH:MM:SS`
Для однократного запуска:
```console
foo@bar:~$ ./monitoring -e [ENDPOINT] -p [PROCESS_NAME]
```
- `[PROCESS_NAME]` -- имя процесса, который нужно мониторить (по умол. `test`)
- `[ENDPOINT]` -- конечная точка, куда нужно стучаться в случае запущенного процесса (по умол. `https://test.com/monitoring/test/api`)
## Установка службы
Для установки необходимы права администратора.
```console
foo@bar:~$ sudo ./install.sh -e [ENDPOINT] -p [PROCESS_NAME]
```
- `[PROCESS_NAME]` -- имя процесса, который нужно мониторить (по умол. `test`)
- `[ENDPOINT]` -- конечная точка, куда нужно стучаться в случае запущенного процесса (по умол. `https://test.com/monitoring/test/api`)
## Проверка
Для проверки можно использовать сервис [PutsReq](https://putsreq.com/). Для этого нужно:
1. Зайти на сайт;
2. Нажать "Create a PutsReq";
3. Вставить в поле "Responce builder" код ниже:
```javascript
// Build a response
var msg = 'Hello World';
if(request.params.name) {
msg = 'Process: ' + request.params.name + '\n';
}
if (request.params.pid) {
msg += 'PID: ' + request.params.pid + '\n';
}
if (request.params.date) {
msg += 'Date: ' + request.params.date + '\n';
}
response.body = msg;
```
4. Скопировать URL;
5. Запустить скрипт командой:
```console
foo@bar:~$ ./monitoring -e [URL] -p [PROCESS_NAME]
```
В поле "Responce" должен появиться ответ, похожий на следующий:
```
Process: emacs
PID: 448899
Date: 2025-05-19T21:59:55
```
# Примечания
1. По умолчанию, служба отрабатывает раз в 20 секунд. Чтобы это
изменить, нужно поменять значение `OnUnitActiveSec` в файле
`monitoring.timer.template`.
2. Установочный скрипт копирует исполняемый файл в директорию
`/usr/bin/`, которая должна быть включена в переменную `PATH`.