Portál AbcLinuxu, 11. května 2025 04:36

Dotaz: Debian 10 (systemd): provedení skriptu při vypínání

3.10.2019 00:08 GeBu | skóre: 27 | blog: zápisky
Debian 10 (systemd): provedení skriptu při vypínání
Přečteno: 745×
Odpovědět | Admin
Ahojte, sice ve fóru podobné dotazy jsou, ale ještě v době před systemd. Poradíte někdo, jaká se nyní v Debianu tj. Debian 10, zařídí, aby skript pozdržel vypnutí (pomocí tlačítka) dokud něco neprovede?

Při normálním spuštění mi skrip funguje: * Napřed killne nahrávání mp3. * Pak nahraný soubor uploaduje na web.

Skript jsem uložil do cesty "/lib/systemd/system-shutdown/" podle systemd-halt.service, ale to mi nejede.

Pro jistotu opakuji, že se jedná o vypnutí pomocí tlačítka počítače - konkrétně je to NUC.

Chtěl bych, aby zařízení zapnutím začalo automaticky nahrávat (to funguje) a při stisku tlačítka nahrávání ukončilo, soubor nahrálo na web a vypnulo se.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.10.2019 00:26 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
Daj ten .conf ktory riesi vypinanie pre SystemD.

Uz sa mi stalo, ze tusim databaza, ze as vypne najneskor v 1.5 minute, potom v 4. minute a potom som nechcel cakat, tak som to natvrdo vypol.
3.10.2019 09:13 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Já to potřebuji obráceně. Prostě se to vypne a soubor mi to nenahraje. Máš na mysli toto: https://manpages.debian.org/testing/systemd/systemd-system.conf.5.en.html ?
3.10.2019 15:23 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Myslel som Tvoje .service (pisal som to vtedy v mobile).
3.10.2019 17:15 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Snad si rozumíme. Níže je výpis /lib/systemd/system/systemd-halt.service ale do něho jsem nehrabal. Nenastavoval jsem nic, protože v jeho manpages je uvedeno:

Immediately before executing the actual system halt/poweroff/reboot/kexec systemd-shutdown will run all executables in /lib/systemd/system-shutdown/ and pass one arguments to them: either "halt", "poweroff", "reboot" or "kexec", depending on the chosen action. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished. Takže svůj skript jsem uložil do /lib/systemd/system-shutdown/

Výpis /lib/systemd/system/systemd-halt.service:

# SPDX-License-Identifier: LGPL-2.1+ # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version.

[Unit] Description=Halt Documentation=man:systemd-halt.service(8) DefaultDependencies=no Requires=shutdown.target umount.target final.target After=shutdown.target umount.target final.target

[Service] Type=oneshot ExecStart=/bin/systemctl --force halt
3.10.2019 18:54 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Ako spustas sluzbu?

Sak u sprav ako deamon. Spusti sa a pri ukonceni - tj. dostani signalu napr. SIGUSR2, zastavi, uploadne na internet a sa vypne.

Nerob zvlast spustanie a zvlast vypnutie. Urob ze sa zaplne a bezi do vypnutia. Ak sa bude vypinat - ukonci, uploadne a sam seba proces ukonci.

Vypinanie nechaj vypinanim, don nepotrebujes sahat.
k3dAR avatar 3.10.2019 19:10 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
predpokladal ze chtel vypis "Takže svůj skript jsem uložil do /lib/systemd/system-shutdown/"

me jen napada, kdyz ctu "will run all executables in /lib/systemd/system-shutdown/"
zda si tomu "tvemu skriptu" nastavil executable atribut:
sudo chmod a+x /lib/systemd/system-shutdown/tvujskript
porad nemam telo, ale uz mam hlavu... nobody
3.10.2019 19:23 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Nenastavi to nahodou? Resp. ci sa na to nespolieha. Resp. vyhodi chybu.

systemct enable XXXXX.service
k3dAR avatar 3.10.2019 19:50 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
ona to ale neni service, ale je to skript kterej paralelne vola systemd service s toho adresare ale (dle infa vejs ci man) resi prave a pouze ty co tam jsou zpustitelne...
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 3.10.2019 19:53 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
edit: kterej je paralelne volan z systemd servise z toho adresare...
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 3.10.2019 20:15 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
zkusil sem a ne, systemd-halt.service nenastavi atribut executable skriptum v /lib/systemd/system-shutdown/
kdyz nenastavim ja, tak to ignrouje, kdyz ho nastavim ja tak se pusti, ale (a v tom bude asi tazatel mit zakladni problem), neni to vhodne pro jeho potreby, protoze to opravdu (jak se i pise v man) "Immediately before executing the actual system halt/poweroff/reboot/kexec", tzn. v tu chvili uz jsou killnute procesy (coz by mu nevadilo ze uz je nahravani mp3 killnute), je schozena sit a jsou odpojene vsechny filesystemy...
porad nemam telo, ale uz mam hlavu... nobody
3.10.2019 21:21 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Díky. Killnuté procesy mi nevadí - naopak to nahrávání potřebuji killnout a první příkaz je právě killnutí toho nahrávání. Ale to, že nejede síť je problém, protože druhý příkaz má nahraný soubor MP3 pomocí sftp nahrát na úložiště.
3.10.2019 21:52 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Na začátek skriptu jsem přidal cat /proc/cpuinfo >> ahoj.txt a neprovede se ani toto. Při ručním spuštění ano.
k3dAR avatar 3.10.2019 22:07 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
pri rucnim spusteni se to ulozi do aktualniho adreasare kde ses, pri spusteni pres sluzbu by se to (v pripade ze se to opravdu spusti) ulozilo nekam-nevim-kam-kde-systemd-je :-) zkontroloval si ze to ma atribut eXecutable (x?
ls -l /lib/systemd/system-shutdown/tvujscript
melo by pred souborem sobrazit "-rwxr-xr-x" (dulezite jsou ty x) pokud ne, pridej jak sem psal, pokud jo, zkus do skriptu pridat radek "sleep 30" a uvidis zda se pri vypnuti 30s zastavi a bude cekat...
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 3.10.2019 22:10 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
a pro jistotu, jak kopirujes pres sftp ten soubor? pokud jinak, nez nasledujici, zkus tak:
scp /cesta/soubor.mp3 uzivatel@server:/cesta/
samozrejme musis mit na NUC ssh privatni klic v /root/.ssh/id_rsa a na serveru z paru verejnej klic pridanej jako radek v /home/uzivatel/.ssh/authorized_keys
porad nemam telo, ale uz mam hlavu... nobody
3.10.2019 23:12 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Klíče tam mám a scp mi server nebere. Chce jen sftp. Ale ve skriptu mi to funguje.
3.10.2019 23:08 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Práva v pořádku.
k3dAR avatar 3.10.2019 22:02 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
tak beru zpet, sit dostupna je(pretim sem to spatne bral z ukonceneho ssh spojeni), filesystem pripojen je(pretim sem vychazel z hlassek na obrazovce ze odpojen all filesystem), tzn. zkopirovat soubor z /cesta/soubor pres sftp (resp. overil sem pres scp) jit "musi"...
porad nemam telo, ale uz mam hlavu... nobody
3.10.2019 19:34 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Pod rootem jsem ten skript zkoušel spouštět přímo v tom umístění /lib/systemd/system-shutdown/, abych zjistil, jestli dělá co má. A funguje mi.
k3dAR avatar 3.10.2019 19:49 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
pokud pod rootem pustis: "sh skript" nebo "bash skript" tak nemusi mit executable priznak a presto se pusti...
porad nemam telo, ale uz mam hlavu... nobody
3.10.2019 23:29 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vydal jsem se novým směrem - přes jednotku. V cestě /etc/systemd/system/nahoru.service jsem vytvořil jednotku:

[Unit]

Description=Nahoru

DefaultDependencies=no

Before=shutdown.target halt.target

RequiresMountsFor=/home

[Service]

Type=oneshot

ExecStart=/root/nahoru.sh

[Install]

WantedBy=halt.target shutdown.target

A tu uvedl do chodu:

systemctl daemon-reload

systemctl enable nahoru.service

Při stisku tlačítka se skript provede samotný skript mám správně, ale PC se nevypne. Síť ale spadne a už se na něho nedostanu.

Ve výpise "systemctl | grep nahoru" je uvedeno: ● nahoru.service loaded failed failed Nahoru
4.10.2019 00:03 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Chyba byla v tom Type=oneshot. Bylo tam potřeba dát Type=simple.
4.10.2019 12:32 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Tak jsem se uprostřed noci unáhlil. Sice už se ten skript zřejmě spouští, ale vypínání na něho nepočká a tak se nahraje jen 300 kB a v noci jsem to zkoušel jen na krátké nahrávce.
4.10.2019 13:50 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Tady řešil někdo podobný problém jako ty. A doporučili mu podívat se do dokumentace systemd na parametry ExecStop= a ExecStopPost=
4.10.2019 21:19 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
V tuto chvílí to vzdávám. Připojím se na ten stroj vzdáleně a skript spustím a pak PC vypnu. Už jsem tomu věnoval moc času a pořád jsem se nedostal moc daleko. Zatím mám pocit, že ty návody jdou různými cestami a nejsem z toho schopen udělat závěr pro sebe.
4.10.2019 13:57 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Co tak este pridat zavislost na internete?
4.10.2019 23:22 LarryL | skóre: 27
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
Řešil jsem něco podobného a zjistil jsem, že dávat "vypínací" script do /lib/systemd/system-shutdown/ je blbé, protože ten script je "mrzáček", který toho nemá moc k dispozici, protože systemd před tím vše killne. Nejspolehlivější je vytvořit službu systemD a do ní uvést závislosti. Pro mě nebylo praktické dělat z toho službu (potřeboval jsem to jako normální script), ale zjistil jsem, že existuje příkaz pro jednorázové spuštění služby pomocí:

systemd-run

Ať už to uděláš přes systemd-run nebo klasickou službou, tak prozkoumej tyto možnosti, co z toho se pro tvůj script bude hodit: After=network.target

Type=forking

Type=simple

ExecStop=

TimeoutStopSec=

KillMode=none
5.10.2019 08:42 LarryL | skóre: 27
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Ještě jsem zapomněl na důležitý parametr --user při vytváření služby, který zajistí vytvoření dočasné služby běžným uživatelem. Použití:

systemd-run --user command args

systemctl --user enable service
5.10.2019 04:51 noob
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zanedlouho se to bude dat resit i jinak/lepe. https://blogs.gnome.org/benzea/2019/10/01/gnome-3-34-is-now-managed-using-systemd/
5.10.2019 08:29 LarryL | skóre: 27
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Nějak se nechytám. Který příkaz z toho článku bude přinášet zásadní změnu "vypínacích" scriptů pro uživatele Gnome? Co když někdo nepoužívá Gnome?
5.10.2019 10:36 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vsimol som si, ze ked stlacis tlacidlo vypnut vo XFCE, tak ti nevypne pc, ale da ti menu s ponukami na vypnutie, uspanie, odhlasenie.

Skus ist tou cestou, ze odchytit to stisknutie.

Tu mas, ako na tej najnizsej urovne funguje v linuxe zachytenie stlaceneho tlacidla (low user-space): http://linuxos.sk/clanok/ako-na-konfiguraciu-hernych-ovladacov-2/
Josef Kufner avatar 5.10.2019 12:52 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
To se řeší pomocí inhibitor locku, kterým se Systemd zabrání vypnutí. Je to úplně jiný problém, než tazatel řeší. Unit soubor se správnými závislostmi, jak se řeší výše, je správný přístup, jen tam má něco špatně.
Hello world ! Segmentation fault (core dumped)
5.10.2019 13:19 debian+
Rozbalit Rozbalit vše Re: Debian 10 (systemd): provedení skriptu při vypínání
Odpovědět | | Sbalit | Link | Blokovat | Admin
https://serverfault.com/questions/771838/prevent-shutdown-until-execstop-script-completes/772062#772062

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.