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/.



Użytkownik
Witam.
W sumie nie wiem czy to do tego działu pasuje... ale gdzieś to musiałem wsadzić, a w końcu systemd to też software ;)
Mam taki dziwny problem (tzn. dziwny dla mnie, ale może czegoś nie wiem).
Zrobiłem sobie taki prosty serwisik dla systemd. Zrobiłem, uruchomiłem, podziałał i przestał.
Zrobiłem mu restart, podziałał i przestał.
Ogólnie działa to jakieś dwa-trzy dni, w tym czasie bardzo ładnie spełnia swoje zadanie, potem zdycha i systemd mimo ustawienia "Restart = always" nie ma zamiaru go podnieść.
Co robię źle?
RPi 3B+, działa non stop.
plik watchprinter.service:
[Unit] Description = Autoconnect for octoprint [Service] ExecStart = /usr/local/bin/watchprinter Restart = always [Install] WantedBy = muti-user.target
plik /usr/local/bin/watchprinter:
#!/usr/bin/env python
#coding: utf-8
import requests, json, re, signal, time
class octonector(object):
api = None
def __init__(self):
if not self.__class__.api:
import yaml
conf = yaml.safe_load(open('/home/pi/.octoprint/config.yaml'))
self.__class__.api = conf['api']['key']
self._enabled = False
def enable(self):
self._enabled = True
def enabled(self):
rc = self._enabled
self._enabled = False
return rc
def doPostRequest(self,cmd,data):
path='http://127.0.0.1:5000/api/%s' % cmd
rc=requests.post(path, headers={
'Host': 'localhost',
'Content-Type': 'application/json',
'X-Api-Key' : self.__class__.api},
json=data)
return rc.status_code in (204,200)
watcher=octonector()
def ena(*args):
global watcher
watcher.enable()
signal.signal(signal.SIGUSR1, ena)
while True:
signal.pause()
if watcher.enabled():
time.sleep(5);
try:
watcher.doPostRequest('connection',{'command':'connect'})
except:
passplik /etc/udev/rules.d/55-printer.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", RUN+="/bin/systemctl kill -s USR1 watchprinter"Tak przy okazji - bardzo wygodne, pod warunkiem że działa :(
Offline



Dzban Naczelny



Użytkownik
Dodałem - zobaczymy, jak znam życie to teraz przez dłuższy czas będzie działać bez konieczności restartu ;)
Skrypt podłącza drukarkę do działającego octoprinta po jej włączeniu do prądu. Fajne jeśli maszynka z octoprintem działa non stop.
Offline



Dzban Naczelny
Ewentualnie może skrypt się wysypuje w jakiś dziwny sposób?
Systemd monitoruje czy pid istnieje, jeśli skrypt się wygnie ale tylko troszkę to dla systemd on ciągle działa.
Może wstaw jakieś linijki z logiem czy debugowaniem to zobaczysz co się dzieje

Offline



Użytkownik
No właśnie systemctl status informuje, że proces zdechł :(
Tak w ogóle to ciekawe czemu on w ogóle zdycha, ale to mniejszy problem.
Offline





Cenzor wirtualnego świata
Pewnie jest błędnie skonfigurowana usługa dla systemd. xD
Ten /usr/local/bin/watchprinter to on forkuje sam po tym jak zostanie uruchomiony? Bo jeśli forkuje sam, to typ usługi nie powinien być (domyślnie) simple tylko forking:
[Unit] Description = Autoconnect for octoprint [Service] Type= forking ExecStart = /usr/local/bin/watchprinter Restart = always [Install] WantedBy = muti-user.target
Offline



Użytkownik
Nic się nie forkuje, kod prosty jak rogalik, zamieściłem przecież w pierwszym poście :(
Zresztą gdyby się forkował to by nie działał kill z udev... a przecież działa!
Ostatnio edytowany przez ethanak (2018-10-27 12:34:20)
Offline





Cenzor wirtualnego świata



Użytkownik
W logach nie ma nic (pomijając fakt że nie bardzo wiem w którym logu tego szukać). Tak jakby Systemd w ogóle nie próbował restart.
Co ciekawsze - jeśli z palca ubiję proces wielce ślicznie się restartuje...
OT - jak się wyłącza tego podpowiadacza w androidzie?
Offline





Cenzor wirtualnego świata
np. w:
# journalctl -u watchprinter
OT - jak się wyłącza tego podpowiadacza w androidzie?
Co się wyłącza? xD
A jak byś dodał:
RuntimeMaxSec=10
Restart=on-failure
To będzie się ładnie resetował co 10s?
Ostatnio edytowany przez morfik (2018-10-27 13:30:26)
Offline



Użytkownik
To chujstwo co mi zamienia kill na koło, systemd na systemy i ogólnie lepiej wie co ja chcę napisać:)
Resztę sprawdzę w domu.
Offline





Cenzor wirtualnego świata
W ustawieniach klawiatury musisz sobie wyłączyć. Przytrzymaj przecinek i weź sobie kółko zębate -> korekta teksu i tam masz autokorekta itp.
Ostatnio edytowany przez morfik (2018-10-27 13:53:15)
Offline







Podobno człowiek...;)








Zawsze też można zapiąć skrypta do daemontoolsa, ten bez żadnej łaski trzyma każdego demona przy życiu.
Ze skryptem startowym daemontoolsa sobie nawet szympans poradzi.
Daemontools w Debianie z Systemd?
● daemontools.service - Daemontools service supervision
Loaded: loaded (/lib/systemd/system/daemontools.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-08 07:13:00 CEST; 2 weeks 5 days ago
Main PID: 1437 (svscanboot)
Tasks: 87 (limit: 4915)
CGroup: /system.slice/daemontools.service
├─ 1437 /bin/sh /usr/bin/svscanboot /etc/service/
├─ 1443 svscan /etc/service
├─ 1451 supervise phpmageadmin
├─ 1452 supervise opendkim
├─ 1453 supervise dropbear
├─ 1454 supervise sshd
├─ 1455 supervise cgroup
├─ 1456 supervise phpmagento
├─ 1457 supervise redis
├─ 1458 supervise php71
├─ 1459 supervise prosody
├─ 1460 supervise mysql
├─ 1461 supervise dovecot
├─ 1462 supervise postfix
├─ 1463 supervise nginx
├─ 1464 /usr/sbin/opendkim -f -x /etc/opendkim/opendkim.conf
├─ 1465 /usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf
├─ 1466 php-fpm: master process (/etc/php/7.1/fpm/fpm-magento.conf)
├─ 1467 /usr/sbin/sshd -D -e -f /etc/ssh/sshd_config
├─ 1468 dropbear -F -R -E -s -a -p *:19017
├─ 1470 /usr/sbin/dovecot -F
├─ 1472 /bin/bash ./run
├─ 1473 /usr/lib/postfix/sbin/master
├─ 1474 /bin/sh ./run
├─ 1475 php-fpm: master process (/etc/php/7.1/fpm/fpm-mageadmin.conf)
├─ 1476 php-fpm: master process (/etc/php/7.1/fpm/php-fpm.conf)
├─ 1599 /usr/bin/redis-server 127.0.0.1:6379
├─ 1708 qmgr -l -t unix -usvstat /etc/service/* /etc/service/cgroup: up (pid 1474) 1666904 seconds /etc/service/dovecot: up (pid 1470) 1666904 seconds /etc/service/dropbear: up (pid 1468) 1666904 seconds /etc/service/mysql: up (pid 1465) 1666904 seconds /etc/service/nginx: up (pid 8525) 28173 seconds /etc/service/opendkim: up (pid 1464) 1666904 seconds /etc/service/php71: up (pid 1476) 1666904 seconds /etc/service/phpmageadmin: up (pid 1475) 1666904 seconds /etc/service/phpmagento: up (pid 1466) 1666904 seconds /etc/service/postfix: up (pid 1473) 1666904 seconds /etc/service/prosody: up (pid 11703) 546572 seconds /etc/service/redis: up (pid 1472) 1666904 seconds /etc/service/sshd: up (pid 1467) 1666904 seconds
Pozdro
Ostatnio edytowany przez Jacekalex (2018-10-27 14:17:08)
Offline



Użytkownik
Taaaa... a kiedyś życie było takie proste ;) Jak mi jeszcze powiesz jak ustawić mp3 jako sygnał dla przychodzącej wiadomości to Cię będę po wszystkich odpustach wychwalać... odkąd miałem androjady to wszędzie było, teraz w oreo jakoś znaleźć nie mogę :(
Wracając do meritum - owszem, po dodaniu RuntimeMaxSec = 10 bardzo ładnie restartuje po 10 sekundach.
Co w związku z tym?
Offline



Użytkownik
@jacekalex: znam prostsze rozwiązania, nawet szympansa nie muszę angażować - ale chcę to zrobić na systemd, opublikować i zbierać laury jako genialny wynalazca. Poniatno?
Offline







Podobno człowiek...;)








ethanak napisał(-a):
@jacekalex: znam prostsze rozwiązania, nawet szympansa nie muszę angażować - ale chcę to zrobić na systemd, opublikować i zbierać laury jako genialny wynalazca. Poniatno?
Poniatno, poniatno, ino musisz to na Androida, MacOS i Windowsa zrobić (tam nie ma systemd), bo w Linuxie na jednym skrypcie i tak nagrody nobla nie zaliczysz. xD
Offline



Użytkownik
@jacekalex: E tam - widziałeś kiedyś żeby ktoś odpalał octoprinta na czymś innym niż raspbian? :):):) Spoko, nobel murowany!
Offline