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  2016-02-17 11:45:56

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

[+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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 [b]przed[/b] 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 [b]po[/b] 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)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#2  2016-02-17 14:02:48

  thomsson - Dyskutant

thomsson
Dyskutant
Zarejestrowany: 2011-10-26

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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?


ilin napisał
[i]"DUG to tez moja mała ojczyzna"[/i]

Offline

 

#3  2016-02-17 14:15:07

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#4  2016-02-17 15:14:21

  yossarian - Szczawiożerca

yossarian
Szczawiożerca
Skąd: Shangri-La
Zarejestrowany: 2011-04-25

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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.[/quote]
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

 

#5  2016-02-17 15:39:50

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#6  2016-02-17 15:59:17

  yossarian - Szczawiożerca

yossarian
Szczawiożerca
Skąd: Shangri-La
Zarejestrowany: 2011-04-25

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

Możesz też skorzystać z [tt]WantedBy=[/tt], np.:

WantedBy=graphical.target[/quote]
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/understanding-systemd-units-and-unit-files

Offline

 

#7  2016-02-17 16:16:31

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#8  2016-02-18 17:43:02

  yossarian - Szczawiożerca

yossarian
Szczawiożerca
Skąd: Shangri-La
Zarejestrowany: 2011-04-25

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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 [tt][Service][/tt] z opcją: [tt]Type=oneshot[/tt], 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[/quote]
Dopasuj i rozbuduj o inne ewentualne opcje.

Offline

 

#9  2016-02-18 20:51:24

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

Dzięki - zrobiłem, działa ślicznie.

Mam tylko pytanko: jest sobie bardzo prosty serwisik:

Kod:

[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?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#10  2016-02-18 21:06:55

  yossarian - Szczawiożerca

yossarian
Szczawiożerca
Skąd: Shangri-La
Zarejestrowany: 2011-04-25

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

Tu masz wszystko pokazane:
[quote=man systemd.service]

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           │
           └──────────────────┴────┴────────┴────────────┴────────────┴─────────────┴──────────┴─────────────┘

[/quote]
Jak widać, przy wartości [tt]always[/tt] systemd zawsze podniesie usługę ponownie przy przerwaniu jej pracy.

Offline

 

#11  2016-02-18 21:12:57

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

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.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#12  2016-02-18 21:14:54

  uzytkownikubunt - Zbanowany

uzytkownikubunt
Zbanowany
Zarejestrowany: 2012-04-25

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

2742

Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:35:05)

Offline

 

#13  2016-02-18 21:16:30

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: [+][OSMC] Start skryptu jednorazowo przed uruchomieniem mediacenter

W sumie racja - tak się przyzwyczaiłem do tego że mam mana pod palcami że czasami zapominam że są inne możliwości :)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00009 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00097 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.218.97.75' WHERE u.id=1
0.00097 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.218.97.75', 1727820678)
0.00039 SELECT * FROM punbb_online WHERE logged<1727820378
0.00057 SELECT topic_id FROM punbb_posts WHERE id=297733
0.00004 SELECT id FROM punbb_posts WHERE topic_id=28289 ORDER BY posted
0.00060 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=28289 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00180 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=28289 ORDER BY p.id LIMIT 0,25
0.00086 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28289
Total query time: 0.00639 s