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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
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.
#!/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
Offline
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/
Offline
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:
### cat /etc/service/phpfpm/run
#!/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)
Offline
urbinek napisał(-a):
Ale po co?
https://singlebrook.com/2017/10/23/auto-restart-cra … vice-systemd/
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:
[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:
sudo systemctl edit usluga
[Service] Type=forking PIDFile=/var/run/usluga.pid RemainAfterExit=no Restart=on-failure RestartSec=5s
Dalej:
sudo systemctl daemon-reload
[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:
sudo kill -9 282926
Sprawdzam, czy usługa jest restartowana:
[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
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.
Offline
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.
! 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