works
This commit is contained in:
38
vlad/rgz/bad_service.sh
Normal file
38
vlad/rgz/bad_service.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
target=/etc/systemd/system/fifo.service
|
||||
|
||||
USER="pajjilykk"
|
||||
GROUP="pajjilykk"
|
||||
WORKDIR="/home/pajjilykk/CLionProjects/CS-LABS/vlad/rgz"
|
||||
EXECUTABLE="$WORKDIR/daemon"
|
||||
tmp=$(mktemp)
|
||||
|
||||
trap 'rm -f "$tmp"' EXIT
|
||||
|
||||
cat > "$tmp" <<UNIT
|
||||
[Unit]
|
||||
Description=FIFO text processing daemon (systemd-managed)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=$EXECUTABLE pepep
|
||||
User=$USER
|
||||
Group=$GROUP
|
||||
WorkingDirectory=$WORKDIR
|
||||
KillSignal=SIGTERM
|
||||
TimeoutStopSec=5s
|
||||
KillMode=control-group
|
||||
Restart=on-failure
|
||||
RestartSec=1s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
UNIT
|
||||
|
||||
sudo install -m 0644 "$tmp" "$target"
|
||||
sudo systemctl daemon-reload
|
||||
echo "Replaced \`$target\` with the predefined service unit."
|
||||
@@ -1,7 +1,7 @@
|
||||
// fifo_client.c
|
||||
// Клиент: читает входной файл, отправляет содержимое в FIFO_REQUEST,
|
||||
// читает ответ из FIFO_RESPONSE, отделяет хвост "\nREPLACEMENTS:<n>\n",
|
||||
// пишет обработанный текст в выходной файл и печатает число замен.
|
||||
// читает ответ из FIFO_RESPONSE, отделяет "\nREPLACEMENTS:<n>\n",
|
||||
// пишет обработанный текст в выходной файл и печатает количество замен.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
// fifo_server_daemon.c
|
||||
// Демон: читает из FIFO_REQUEST, обрабатывает текст,
|
||||
// для каждой пары одинаковых подряд символов заменяет второй на пробел,
|
||||
// всего не более max_replacements замен, пишет результат в FIFO_RESPONSE
|
||||
// и дописывает "\nREPLACEMENTS:<n>\n". Логирует ошибки в syslog.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <syslog.h>
|
||||
#include <stdio.h> // fprintf
|
||||
#include <stdlib.h> // malloc, free, exit, strtoll
|
||||
#include <string.h> // strlen, strerror
|
||||
#include <unistd.h> // read, write, close, unlink
|
||||
#include <fcntl.h> // open, O_RDONLY, O_WRONLY
|
||||
#include <sys/types.h> // типы
|
||||
#include <sys/stat.h> // mkfifo
|
||||
#include <errno.h> // errno
|
||||
#include <signal.h> // signal, SIGINT, SIGTERM, SIGPIPE
|
||||
#include <syslog.h> // syslog, openlog, closelog
|
||||
|
||||
#define FIFO_REQUEST "/tmp/fifo_request"
|
||||
#define FIFO_RESPONSE "/tmp/fifo_response"
|
||||
@@ -22,13 +26,16 @@ void signal_handler(int sig) {
|
||||
running = 0;
|
||||
}
|
||||
|
||||
// разбор неотрицательного long long
|
||||
static long long parse_ll(const char *s) {
|
||||
char *end = NULL;
|
||||
errno = 0;
|
||||
long long v = strtoll(s, &end, 10);
|
||||
|
||||
if (errno != 0 || end == s || *end != '\0' || v < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -176,7 +183,9 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
char result[64];
|
||||
snprintf(result, sizeof(result), "\nREPLACEMENTS:%lld\n", replacements);
|
||||
write(fd_resp, result, strlen(result));
|
||||
if (write(fd_resp, result, strlen(result)) < 0) {
|
||||
syslog(LOG_WARNING, "write replacements trailer failed: %s", strerror(errno));
|
||||
}
|
||||
|
||||
close(fd_resp);
|
||||
syslog(LOG_INFO, "Response sent: %zd bytes; replacements=%lld",
|
||||
|
||||
@@ -9,7 +9,7 @@ GROUP="pajjilykk"
|
||||
WORKDIR="/home/pajjilykk/CLionProjects/CS-LABS/vlad/rgz"
|
||||
EXECUTABLE="$WORKDIR/daemon"
|
||||
tmp=$(mktemp)
|
||||
wo
|
||||
|
||||
trap 'rm -f "$tmp"' EXIT
|
||||
|
||||
cat > "$tmp" <<UNIT
|
||||
|
||||
Reference in New Issue
Block a user