Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2020-09-12 20:47:42

  chmuraz - Nowy użytkownik

chmuraz
Nowy użytkownik
Zarejestrowany: 2020-09-12

Skrypt sprawdzający, czy dana usługa działa

Cześć,

Proszę o sprawdzenie, czy poniższy skrypt jest poprawny. Skrypt uruchamiany jest cyklicznie przez cron i ma zadanie sprawdzać, czy dana usługa działa.
Zaadoptowałem go i zmieniłem dla usługi, która uruchamiana jest przez systemd.

Kod:

#!/bin/bash
PIDFILE=/var/run/usluga.pid
if (kill -0 `cat $PIDFILE`)
   then
      echo "it's alive!" > /dev/null 2>&1
   else
      rm $PIDFILE
      sudo systemctl start usluga
      echo "Usluga restarted at `date`" >> /var/log/usluga-crash.log
fi

Czy macie może inne wypróbowane sposoby na automatyczne sprawdzanie, czy dana usługa działa i ewentualne jej ponowne uruchomienie?

Dziękuję z góry za pomoc.

Offline

 

#2  2020-09-12 20:56:36

  urbinek - Dzban Naczelny

urbinek
Dzban Naczelny
Skąd: Sosnowiec
Zarejestrowany: 2009-10-01
Serwis

Re: Skrypt sprawdzający, czy dana usługa działa


A w wolnym czasie, robię noże :)
http://nginx.urbinek.eu/_photos/signature.png

Offline

 

#3  2020-09-12 21:16:27

  urbinek - Dzban Naczelny

urbinek
Dzban Naczelny
Skąd: Sosnowiec
Zarejestrowany: 2009-10-01
Serwis

Re: Skrypt sprawdzający, czy dana usługa działa

I oczywiście nie musisz pisać nowej usługi tylko użyj systemctl edit
https://www.linode.com/docs/quick-answers/linux-ess … to-systemctl/


A w wolnym czasie, robię noże :)
http://nginx.urbinek.eu/_photos/signature.png

Offline

 

#4  2020-09-13 07:23:37

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Skrypt sprawdzający, czy dana usługa działa

Proszę o sprawdzenie, czy poniższy skrypt jest poprawny. Skrypt uruchamiany jest cyklicznie przez cron i ma zadanie sprawdzać, czy dana usługa działa.

Pomijajac wbudowane możliwości SystemD, w repo masz jeszcze programik Monit, który robi dokładnie to samo, i powiadamia mailem, kiedy kilka kolejnych restartów nie podnosi usługi.
https://www.cyberciti.biz/faq/how-to-install-and-us … linux-server/

Jak lubisz własną artystyczną rzeźbę w kodzie to polecam daemontools, w Debianie chodzi grzecznie i daje niemal kosmiczne możliwości.

NP mój skrypt do php-fpm w Debianie:

Kod:

### cat /etc/service/phpfpm/run

Kod:

#!/bin/bash

exec 2>&1
export  TZ='Europe/Warsaw'

test -d /run/php || mkdir -p /run/php;
chown -R php:php /run/php;
chown -R php:php /var/log/php
chmod 1777 /run/php;
mkdir -p /tmp/php/{roudcube,presta,wordpress,phpmyadmin}/
chown  php:php  /tmp/php/{roudcube,presta,wordpress,phpmyadmin}/
chmod 1770  /tmp/php/{roudcube,presta,wordpress,phpmyadmin}/
mkdir -p /tmp/php/{sessions,upload,soap,opcache}/
chown  php:php  /tmp/php/{sessions,upload,soap,opcache}/
chmod 1770  /tmp/php/{sessions,upload,soap,opcache}/

### /usr/bin/cgclassify -g memory,cpu,net_cls,blkio,pids:serwer/phpfpm $$;
exec /usr/bin/setuidgid php /usr/sbin/php-fpm7.3  -F -y  /etc/php/7.3/fpm/php-fpm.conf

Pozdro

Ostatnio edytowany przez Jacekalex (2020-09-13 07:25:05)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2020-09-13 20:09:31

  chmuraz - Nowy użytkownik

chmuraz
Nowy użytkownik
Zarejestrowany: 2020-09-12

Re: Skrypt sprawdzający, czy dana usługa działa

urbinek napisał(-a):

I oczywiście nie musisz pisać nowej usługi tylko użyj systemctl edit
https://www.linode.com/docs/quick-answers/linux-ess … to-systemctl/

Dzięki za wskazówki.

Poniżej moja usługa:

Kod:

[Unit]
Description=usluga
After=network.target
Requires=network.target
[Service]
Type=forking
PIDFile=/var/run/usluga.pid
ExecStart=/usr/local/bin/usluga -b -B /var/run/usluga.pid
ExecStop=/usr/bin/rm /var/run/usluga.pid
TimeoutStopSec=1
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target

Następnie utworzyłem nową usługę w /etc/systemd/system/usługa.service.d/override.conf:

Kod:

sudo systemctl edit usluga

Kod:

[Service]
Type=forking
PIDFile=/var/run/usluga.pid
RemainAfterExit=no
Restart=on-failure
RestartSec=5s

Dalej:

Kod:

sudo systemctl daemon-reload

Kod:

[root@box ~]# sudo systemctl status usluga
● usluga.service - usluga
   Loaded: loaded (/etc/systemd/system/usluga.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/usluga.service.d
           └─override.conf
   Active: active (running) since Sun 2020-09-13 14:31:51 CEST; 5h 24min ago
  Process: 282807 ExecStop=/usr/bin/rm /var/run/usluga.pid (code=exited, status=0/SUCCESS)
  Process: 282924 ExecStart=/usr/local/bin/usluga -b -B /var/run/usluga.pid (code=exited, status=0/SUCCESS)
 Main PID: 282926 (usluga)
    Tasks: 16 (limit: 18976)
   Memory: 8.7M
   CGroup: /system.slice/usluga.service
           ├─282925 /usr/local/bin/usluga -b -B /var/run/usluga.pid
           └─282926 /usr/local/bin/usluga -b -B /var/run/usluga.pid

Sep 13 14:31:50 box systemd[1]: Starting usluga...
Sep 13 14:31:51 box systemd[1]: usluga.service: Can't open PID file /var/run/usluga.pid (yet?) after start: No such file or directory
Sep 13 14:31:51 box systemd[1]: usluga.service: Supervising process 282926 which is not our child. We'll most likely not notice when it exits.
Sep 13 14:31:51 box systemd[1]: Started usluga.

Zabijam proces:

Kod:

sudo kill -9 282926

Sprawdzam, czy usługa jest restartowana:

Kod:

[root@box ~]# sudo systemctl status usluga
● usluga.service - usluga
   Loaded: loaded (/etc/systemd/system/usluga.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/usluga.service.d
           └─override.conf
   Active: inactive (dead) since Sun 2020-09-13 20:00:48 CEST; 1min 33s ago
  Process: 303253 ExecStop=/usr/bin/rm /var/run/usluga.pid (code=exited, status=0/SUCCESS)
  Process: 282924 ExecStart=/usr/local/bin/usluga -b -B /var/run/usluga.pid (code=exited, status=0/SUCCESS)
 Main PID: 282926

Sep 13 14:31:50 box systemd[1]: Starting usluga...
Sep 13 14:31:51 box systemd[1]: usluga.service: Can't open PID file /var/run/usluga.pid (yet?) after start: No such file or directory
Sep 13 14:31:51 box systemd[1]: usluga.service: Supervising process 282926 which is not our child. We'll most likely not notice when it exits.
Sep 13 14:31:51 box systemd[1]: Started usluga.
Sep 13 20:00:48 box systemd[1]: usluga.service: Killing process 282926 (n/a) with signal SIGKILL.
Sep 13 20:00:48 box systemd[1]: usluga.service: Killing process 282926 (n/a) with signal SIGKILL.

Niestety usługa nie jest restartowana. W czym może być problem?

Ostatnio edytowany przez chmuraz (2020-09-13 21:35:41)

Offline

 

#6  2020-09-14 06:13:34

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Skrypt sprawdzający, czy dana usługa działa

Jak odpalisz skrypta z palca, to zrobi robotę i się zamyka czy wisi w powłoce?
Usługa superwizora nadaje się do procesu, który działa w trybie demona, jak np Nginx albo Sshd,

Skrypt, który zamyka się po wykonaniu zadania, nie nadaje się do takiej kombinacji.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2020-09-14 17:43:17

  chmuraz - Nowy użytkownik

chmuraz
Nowy użytkownik
Zarejestrowany: 2020-09-12

Re: Skrypt sprawdzający, czy dana usługa działa

Jacekalex napisał(-a):

Jak odpalisz skrypta z palca, to zrobi robotę i się zamyka czy wisi w powłoce?
Usługa superwizora nadaje się do procesu, który działa w trybie demona, jak np Nginx albo Sshd,

Skrypt, który zamyka się po wykonaniu zadania, nie nadaje się do takiej kombinacji.

Sądzę, że moja usługa działa w trybie demona - po podpaleniu działa "nonstop" i ma interfejs www, który pozwala na konfigurację i podgląd działania usługi.

Jak poprawić konfigurację systemd, aby moja usługa była monitorowana i ewentualnie restartowana?

Chyba, że można monitorować działanie interfejsu www - znalazlem poniższy skrypt, ale nie wiem jak go poprawić, aby działał - oraz pod systemd.

Kod:

! curl -s -digest -o -u <user>:<password> "http://192.168.1.2:12500" |grep -c "Access denied." >/dev/null
then
/usr/bin/killall -9 usluga
/var/local/usluga -b &
echo `date "+%d/%m/%y %R Web Interface NOT working, restarting...."` >> /var/log/usluga_check.log

Macie jakieś inne pomysły (w miarę proste w realizacji)?

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)