Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Dmitriev_Michail/lab1/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5.0)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20 -Wall -Werror")

project(daemon VERSION 0.1.0 LANGUAGES C CXX)

add_executable(daemon config.cpp daemon.cpp main.cpp)
74 changes: 74 additions & 0 deletions Dmitriev_Michail/lab1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Фоновый процесс (Daemon)

Этот проект представляет собой демон, написанный на языке C++ с
использованием технологии `fork`, который выполняет периодические операции над
файлами в указанных каталогах. Демон работает в фоновом режиме, и его поведение
конфигурируется через файл `config.txt`.


## Задание (вариант 18)

Пользователь задаёт конфигурационный файл,
состоящий из произвольного числа строк вида: folder1 folder2 ext.
Перемещать из folder1 в folder2 файлы с расширением отличным от ext. Интервал 20 (сек)

## Функциональные возможности

- Демон читает конфигурационный файл с указанием каталогов и интервала времени.
- Периодически переносит файлы из одного каталога в другой, исключая файлы с заданным расширением.
- Обрабатывает сигналы:
- **SIGHUP** — перечитывает конфигурационный файл.
- **SIGTERM** — завершает работу с записью сообщения в системный журнал.
- Записи в системный журнал (`syslog`) для сообщений об ошибках, старте и завершении.
- Защита от повторного запуска: при запуске проверяет PID-файл и наличие уже работающего демона.


## Конфигурационный файл

Формат файла `config.txt`:

```
folder1 folder2 ext
```

- `folder1` — каталог, из которого перемещаются файлы.
- `folder2` — каталог, в который перемещаются файлы.
- `ext` — расширение файлов, которые НЕ будут перемещаться.

Пример конфигурации:

```plaintext
folder1 folder2 ext
```

## Сборка

Для сборки проекта запустите скрипт `build.sh`. Он автоматически
компилирует проект, используя флаги `-Wall` и `-Werror`, и очищает промежуточные файлы.

```bash
./build.sh
```

## Обработка сигналов

- **SIGHUP** — перечитывание конфигурационного файла.
- **SIGTERM** — завершение работы с записью в `syslog`.

## Логи и журнал

Демон записывает логи в системный журнал (syslog) для записи информации
о запусках, ошибках и завершении работы. Убедитесь, что у вас есть доступ
к журналам.

## Защита от повторного запуска

Перед запуском демон проверяет наличие своего процесса в `PID`-файле и, если
процесс с этим PID уже существует, завершает его с помощью `SIGTERM`.
После этого текущий процесс записывает свой PID.

## Поддержка и лицензия

Демон создан в учебных целях. Обратная связь приветствуется!
Ссылка на мой проект: https://github.com/Dvimin/operating-systems-labs2024

29 changes: 29 additions & 0 deletions Dmitriev_Michail/lab1/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/sh

initial_dir=$(dirname "$(readlink -f "$0")")
CMAKE_PATH="/usr/bin/cmake"

if [ ! -x "$CMAKE_PATH" ]; then
echo "cmake is not installed. Please install cmake and try again."
exit 1
fi

rm -rf "$initial_dir/build"
mkdir -p "$initial_dir/build"
cd "$initial_dir/build" || { echo "Failed to change to the build directory."; exit 1; }

"$CMAKE_PATH" .. || { echo "Error while running cmake."; exit 1; }
make || { echo "Error while running make."; exit 1; }
cd "$initial_dir" || { echo "Failed to exit build directory."; exit 1; }

CONFIG_FILE="$initial_dir/config.txt"
DAEMON_FILE="$initial_dir/build/daemon"

sudo "$DAEMON_FILE" "$CONFIG_FILE" &
sleep 2

if pgrep -f "$DAEMON_FILE" > /dev/null; then
sudo pkill -f "$DAEMON_FILE"
fi

sudo rm -f "$DAEMON_FILE"
Loading