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/.
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: pass
plik /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
spróbuj dołożyć do [service] opóźnienie do tego restartu
RestartSec=15
Restart=always
do czego jest ten skrypt :)?
Offline
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
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
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
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
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
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
np. w:
# journalctl -u watchprinter
OT - jak się wyłącza tego podpowiadacza w androidzie?[/quote]
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
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
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
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 -u
svstat /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
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
@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
[quote=ethanak]@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?[/quote]
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
@jacekalex: E tam - widziałeś kiedyś żeby ktoś odpalał octoprinta na czymś innym niż raspbian? :):):) Spoko, nobel murowany!
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00003 | SET NAMES latin2 |
0.00173 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.117.78.215' WHERE u.id=1 |
0.00068 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.117.78.215', 1732424247) |
0.00050 | SELECT * FROM punbb_online WHERE logged<1732423947 |
0.00080 | SELECT topic_id FROM punbb_posts WHERE id=321687 |
0.00011 | SELECT id FROM punbb_posts WHERE topic_id=30691 ORDER BY posted |
0.00072 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30691 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00126 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30691 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30691 |
Total query time: 0.00678 s |