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/.
Strony: 1
Witam.
Sytuacja następująca: RPi2 z zainstalowanym OSMC (dla niewtajemniczonych: taki oberżnięty Raspbian Jessie). Do tego wtyczka Kodi RORW.
Działa ślicznie.
Co chcę osiągnąć: Po starcie systemu, ale przed startem Kodi skrypt powinien sprawdzić w jakim trybie pracuje (ro czy rw) i jeśli ro, wykonać parę czynności dodatkowych (np. wywalić cache wtyczki EPG który może tam przypadkowo zostać a na 100% jest nieaktualny, podmienić menu główne tak aby nie pokazały się żadne ustawieia poza rorw i tym podobne pierdułki). Oczywiście powinno to być wykonane raz, restarty kodi nie powinny powodować ponownego wykonania skryptu.
Pytanie: z której strony się do tego zabrać w tym cholernym systemd? W googlach znalazłem dwie odpowiedzi na podobne pytania - tyle że w jednym chodziło o start programu po uruchomieniu Kodi, w drugim zaś pokazany sposób na uruchomienie skryptu przed każdym startem Kodi.
Oczywiście drugie rozwiązanie mogę wykorzystać (skrypt może sprawdzić czy już się raz wykonał i jeśli tak to zrobić grzecznie exit 0) ale to jakieś takie rozwiązanie naokoło... a nie przepadam za takimi.
To jak, towarzysze, pomożecie?
Ostatnio edytowany przez ethanak (2016-02-22 10:07:11)
Offline
Ja chyba nie do końca rozumiem co chcesz zrobić, kiedy ro a kiedy RW? Od czego to zależy?
W systemd można zrobić różną magię, ale nie wiem kiedy chcesz czarować
To ma być skrypt który startuje przed kodi czy ma startować z systemem a potem na startować kodi (oba kolejno ma wystartować systemd ) czy jak?
Offline
kiedy ro a kiedy rw zależy od symlinka do fstaba (istnieją dwie wersje, a wtyczka po prostu przełącza symlink). to akurat działa jak wspominałem.
chcę aby skrypt po sprawdzeniu czy pracujemy w ro czy rw pogmerał trochę w konfiguracji kodi - a więc musi być uruchomiony wcześniej. ponieważ kodi startowany jest przez systemd naturalną moją konkluzją było wystartowanie owego skryptu również przez systemd.
co tu jeszcze niejasnego nie rozumiem... i gdzie tu czary...
w sysv zrobiłbym to obudzony o trzeciej w nocy po tygodniowym piciu...
Offline
Nadal nie odpowiedziałeś jasno na pytanie czy ten Twój skrypt ma zawsze startować wraz z systemem, czy zależnie od różnych okoliczności później (ale przed Kodi).
Before=, After=
A space-separated list of unit names. Configures ordering dependencies between units. If a unit foo.service contains a setting Before=bar.service and both units are being started, bar.service's start-up is delayed until foo.service is started up. Note that this setting is independent of and orthogonal to the requirement dependencies as configured by Requires=. It is a common pattern to include a unit name in both the After= and Requires= option, in which case the unit listed will be started before the unit that is configured with these options. This option may be specified more than once, in which case ordering dependencies for all listed names are created. After= is the inverse of Before=, i.e. while After= ensures that the configured unit is started after the listed unit finished starting up, Before= ensures the opposite, i.e. that the configured unit is fully started up before the listed unit is started. Note that when two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied. i.e. if a unit is configured with After= on another unit, the former is stopped before the latter if both are shut down. If one unit with an ordering dependency on another unit is shut down while the latter is started up, the shut down is ordered before the start-up regardless of whether the ordering dependency is actually of type After= or Before=. If two units have no ordering dependencies between them, they are shut down or started up simultaneously, and no ordering takes place.
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
A tu masz do poczytania w języku polskim:
https://forum.dug.net.pl/viewtopic.php?id=26924
Z tego co pamiętam była tam dosyć szczegółowo opisana kolejność startowania własnych usług.
Offline
wydaje mi się że jasno to wyjaśniłe (start zawsze) ale niech będzie...
mam w takim razie pytanie: czy jeśli dam before = mediacenter (czy jakoś tak) uruchomienie mediacenter zostanie opóźnione do chwili zakończenia mojego skryptu?
podane linki sprawdzę jak będę miał dostęp do normalnego kompa.
Offline
Możesz też skorzystać z WantedBy=, np.:
WantedBy=graphical.target
albo możesz sprecyzować konkretnie przed jakąś dowolną usługą.
To bardzo elastyczne narzędzia i możesz sobie precyzyjnie to ustawić.
Tu masz dość szczegółowe informacje:
https://www.digitalocean.com/community/tutorials/un … nd-unit-files
Offline
ale też nie odpowiedziałeś na moje pytanie: czy uruchomienie skryptu B będzie uzależnione od wcześniejszego uruchomienia skryptu A - czy od jego zakończenia (i ew. statusu zakończenia). łatwiej by mi było czytać gdybym to wiedział...
tym niemniej dziękuję za informację - jeśli mi się wszystko uda to opublikuję wyniki.
Offline
Standardowo kluczowa jest aktywacja wymaganej usługi.
Opcje Wants=/WantedBy= są mniej restrykcyjne i w razie problemów nie blokują wtedy kolejnych procesów.
W tym przypadku możesz zrobić ten swój skrypt jako [Service] z opcją: Type=oneshot, wtedy jest wykonywane jednorazowo podczas uruchamiania systemu i proces jest zakończony.
Taki najprostszy schemat:
[Unit]
Description=Twój skrypt
[Service]
Type=oneshot
ExecStart=/ścieżka/do/skryptu
[Install]
WantedBy=graphical.target
Dopasuj i rozbuduj o inne ewentualne opcje.
Offline
Dzięki - zrobiłem, działa ślicznie.
Mam tylko pytanko: jest sobie bardzo prosty serwisik:
[Unit] Description = Irexec application After = eventlircd.service [Service] Type = simple ExecStart = /usr/bin/irexec /home/osmc/.lircrc Restart = always [Install] WantedBy = mediacenter.service
Wydaje mi się że działa prawidłowo... tylko czy wartość "always" przy Restart jest w porządku?
Offline
Tu masz wszystko pokazane:
man systemd.service napisał(-a):
Kod:
Table 1. Exit causes and the effect of the Restart= settings on them ┌──────────────────┬────┬────────┬────────────┬────────────┬─────────────┬──────────┬─────────────┐ │Restart │ no │ always │ on-success │ on-failure │ on-abnormal │ on-abort │ on-watchdog │ │settings/Exit │ │ │ │ │ │ │ │ │causes │ │ │ │ │ │ │ │ ├──────────────────┼────┼────────┼────────────┼────────────┼─────────────┼──────────┼─────────────┤ │Clean exit code │ │ X │ X │ │ │ │ │ │or signal │ │ │ │ │ │ │ │ ├──────────────────┼────┼────────┼────────────┼────────────┼─────────────┼──────────┼─────────────┤ │Unclean exit code │ │ X │ │ X │ │ │ │ ├──────────────────┼────┼────────┼────────────┼────────────┼─────────────┼──────────┼─────────────┤ │Unclean signal │ │ X │ │ X │ X │ X │ │ ├──────────────────┼────┼────────┼────────────┼────────────┼─────────────┼──────────┼─────────────┤ │Timeout │ │ X │ │ X │ X │ │ │ ├──────────────────┼────┼────────┼────────────┼────────────┼─────────────┼──────────┼─────────────┤ │Watchdog │ │ X │ │ X │ X │ │ X │ └──────────────────┴────┴────────┴────────────┴────────────┴─────────────┴──────────┴─────────────┘
Jak widać, przy wartości always systemd zawsze podniesie usługę ponownie przy przerwaniu jej pracy.
Offline
Jasne - tego mi brakowało.
Przepraszam, ale OSMC bardzo mocno oberżnięty (m. in. z mana) a jest to jedyna maszynka z systemd na pokładzie do której mam dostęp - stąd marudzenie.
Offline
2742
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:35:05)
Offline
W sumie racja - tak się przyzwyczaiłem do tego że mam mana pod palcami że czasami zapominam że są inne możliwości :)
Offline
Strony: 1