Skip to content

Commit

Permalink
Отлаживаем сборку демона для FreeBSD
Browse files Browse the repository at this point in the history
  • Loading branch information
anyks committed Dec 4, 2024
1 parent 6188e8e commit 339d226
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 50 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,6 @@ For **UNIX-like** operating systems, parameters can be specified using environme
"user": "auto",
"group": "auto",
"boost": true,
"daemon": false,
"maxRequests": 600,
"root": "./html",
"log": "./acu.log",
Expand Down Expand Up @@ -457,7 +456,6 @@ For **UNIX-like** operating systems, parameters can be specified using environme
| **user** | Name or user ID under which the application should be launched. The "auto" parameter sets the current user. |
| **group** | Name or identifier of the user group under which the application should be launched. The "auto" parameter sets the current user group. |
| **boost** | Flag for activating reconfiguration of the operating system kernel for maximum network protocol performance. |
| **daemon** | Parameter for activating the server in daemon mode, this parameter is necessary for disconnecting from the parent thread. |
| **maxRequests** | Maximum number of requests to the server per day available to one specific user. |
| **root** | Catalog with the site location in HTML format. |
| **log** | Address of the log file where the processes occurring on the server will be recorded. |
Expand Down
56 changes: 9 additions & 47 deletions app/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,17 +130,18 @@ void help(const string & name, const fmk_t * fmk, const env_t * env, const fs_t
}
}
/**
* daemon Функция создания демона
* pidWrite Функция записи идентификатора процесса
* @param fmk объект фреймворка
* @param log объект для работы с логами
* @param env объект для работы с переменными окружения
* @param fs объект работы с файловой системой
*/
static void daemon(const fmk_t * fmk, const log_t * log, const env_t * env, const fs_t * fs) noexcept {
// Если операционная система является *Nix-подобной
#if defined(__APPLE__) || defined(__MACH__) || defined(__linux__) || defined(__FreeBSD__)
static void pidWrite(const fmk_t * fmk, const env_t * env, const fs_t * fs) noexcept {
/**
* Выполняем работу для Unix
*/
#if !defined(_WIN32) && !defined(_WIN64)
// Если входящие данные переданы
if((fmk != nullptr) && (log != nullptr) && (env != nullptr) && (fs != nullptr)){
if((fmk != nullptr) && (env != nullptr) && (fs != nullptr)){
// Получаем название PID файла
const string & pidfile = env->get("pidfile", true);
// Если адрес PID файла получен
Expand All @@ -151,45 +152,6 @@ static void daemon(const fmk_t * fmk, const log_t * log, const env_t * env, cons
if(fs->isFile(filename))
// Удаляем PID файл
::unlink(filename.c_str());
// Если сервер должен быть запущен в виде демона
if(env->is("daemon", true) && env->get <bool> ("daemon", true)){
// Ответвляемся от родительского процесса
const pid_t pid = ::fork();
// Если пид не создан тогда выходим
if(pid < 0){
// Выводим в лог сообщение
log->print("%s", log_t::flag_t::CRITICAL, "Unable to detach from parent process");
// Выходим из приложения
::exit(EXIT_FAILURE);
// Если с PID'ом все получилось, то родительский процесс можно завершить.
} else if(pid > 0) {
// Выходим из родительского процесса
::exit(EXIT_SUCCESS);
// Изменяем файловую маску
::umask(0);
// Здесь можно открывать любые журналы
// Создание нового SID для дочернего процесса
const pid_t sid = ::setsid();
// Если идентификатор сессии дочернего процесса не существует
if(sid < 0){
// Выводим в лог сообщение
log->print("%s", log_t::flag_t::CRITICAL, "Unable to create child process");
// Выходим из приложения
::exit(EXIT_FAILURE);
}
// Изменяем текущий рабочий каталог
if((::chdir("/")) < 0){
// Выводим в лог сообщение
log->print("%s", log_t::flag_t::CRITICAL, "Unable to get root directory");
// Выходим из приложения
::exit(EXIT_FAILURE);
}
// Закрываем стандартные файловые дескрипторы
::close(STDIN_FILENO);
::close(STDOUT_FILENO);
::close(STDERR_FILENO);
}
}
// Открываем файл на запись
std::ofstream file(filename, ios::out);
// Если файл открыт
Expand Down Expand Up @@ -419,8 +381,6 @@ static void version(const fmk_t * fmk, const log_t * log, const fs_t * fs, const
}
// Выполняем подключение конфигурационного файла
config(&log, &env, &fs);
// Выполняем создание демона
daemon(&fmk, &log, &env, &fs);
// Выполняем инициализацию объекта сервера
server_t server(&fmk, &log);
// Выполняем установку конфигурационных параметров
Expand Down Expand Up @@ -449,6 +409,8 @@ static void version(const fmk_t * fmk, const log_t * log, const fs_t * fs, const
else if(env.isNumber("logLevel", true))
// Выполняем установку уровня логирования из конфигурационного файла
log.level(static_cast <log_t::level_t> (env.get <uint8_t> ("logLevel", true)));
// Выполняем запись идентификатора процесса
pidWrite(&fmk, &env, &fs);
// Выполняем запуск сервера
server.start();
// Выводим удачное завершение работы
Expand Down
1 change: 0 additions & 1 deletion conf/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
"user": "auto",
"group": "auto",
"boost": true,
"daemon": false,
"maxRequests": 600,
"root": "./html",
"log": "./acu.log",
Expand Down

0 comments on commit 339d226

Please sign in to comment.