Portál AbcLinuxu, 12. května 2025 12:53

Dotaz: Použití skriptu místo konsole

20.3.2008 19:26 Roman
Použití skriptu místo konsole
Přečteno: 421×
Odpovědět | Admin
Mám jeden problém. Potřebuji při každém vypnutí počítače spustit jeden příkaz. Napadlo mě, že to udělám tak, že si vytvořím skript, který provede ten příkaz a pak vypne počítač. Jenomže onen první příkaz (sdparm), když napíšu tak, jak je uvedeno níže do konsole, tak je to bez probémů - zastaví se disk. Ale pokud ho dám do skriptu např. vypnout.sh

sdparm -C stop /dev/sdc1
shutdown now

provede se jenom vypnutí počítače a ne zastavení externího disku. Proč se tento příkaz neprovede když v konsoli je to OK?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.3.2008 19:42 Roman
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kromě toho, když např do etc/sudoers dám řádek

roman ALL = (%root) NOPASSWD: /usr/bin/shutdown -k now

a pak napíšu v konsili shutdown -k now, tak mi to vypíše chybu sudo: parse error in /etc/sudoers. Proč?
20.3.2008 20:11 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Upravte řádek do tohoto tvaru: roman ALL = (root) NOPASSWD: /usr/bin/shutdown -k now
příkaz pak spustíte: sudo -u root /usr/bin/shutdown -k now
20.3.2008 20:30 Roman
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Upravovat nebylo třeba, píšu řešení pro ostatní uživatele: chyba "parse error" vznikla tím, že na konci souboru nebyl volný řádek a tím pádem funguje i skript. Jenom jsem chtěl vyzkoušet ještě jednu vychytávku, že vytvořím alias v souboru /home/roman/.bashrc na nějaký příkaz a tento alias napíšu do toho skriptu. Ale to jaksi nejde, píše to, že onen alias "přikaz nelze nalézt", nebo tak něco. Z konsole to jde, ale ze při spoštění skriptu se asi aliasy nenatáhnou.
20.3.2008 21:00 pavel
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Nebylo by lepší dát ten příkaz: "sdparm -C stop /dev/sdc1" na podle mne lepší místo, totiž do /etc/rc.d/rc0.d ?
20.3.2008 21:08 Roman
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Ano, to asi bylo, ale o tomto řešení jsem slyšel jenom asi jednou a pořádně nevím, jak to tam napsat. Kam dát ten příkaz, jak tam udělat link atd.
20.3.2008 22:36 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole

Vytvořte skript, ve kterém bude pouze ten příkaz sdparm ... (tj. hlavně žádné shutdown), udělejte ho spustitelný a vložte do /etc/init.d/. A pak udělejte symlink do adresáře /etc/rcčíslo.d/ (číslo je číslo runlevelu, kdy se má příkaz aplikovat) a pojmenujte ho Kčísloprikaz - což značí, že jde o vypínání (K jako kill) a číslo určí pořadí.

Ve vaší distribuci budou adresáře možná pojmenované mírně odlišně; dále se inspirujte již vytvořenými skripty v init.d a jak vypadají jejich symlinky v rcX.d

I am always ready to learn although I do not always like to be taught. (W. Churchill)
21.3.2008 09:41 Roman
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Tak jsem vytvořil soubor bez přípony obsahující

#!/bin/bash xbacklight -set 50

nahrál ho do /etc/init.d, v /etc/rc.d/rc0.d vytvořil symbolický link na tento soubor pojmenovaný K00mybook. Posléze se bude jednat o jiný příkaz ve skriptu, teď jenom zkušebně snižuji podsvícení. Avšak při vypnutí systému se tento příkaz neprovede, resp. nesníží se podsvícení.
21.3.2008 10:31 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Pro testovací účely bych spíše použil něco jako:
#!/bin/sh
echo "test provadeni scriptu" > /home/uzivatel/test_scriptu
21.3.2008 09:45 JMP | skóre: 30
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
mam dojem, ze pokud se ma prikaz _spustit_ pri vypinani, tak by mel byt spis Scisloprikaz a ne Kcisloprikaz
21.3.2008 09:55 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Při přechodu do některého z runlevelů se nejprve provádějí scripty/symlinky s prefixem K. Takže v tomto případě je K určitě lepší.
22.3.2008 10:32 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole

Jenže ty s prefixem K se provedou u runlevelu, ze kterého se odchází - zde tedy asi číslo 5, zatímco runlevel 0 se spouští.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
22.3.2008 13:19 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Nesouhlasím: http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit
For example, if we are changing from runlevel 2 to runlevel 3, init will first execute all of the K prefixed scripts it finds in /etc/rc3.d, and then all of the S prefixed scripts in that directory. The links starting with K will cause the referred-to file to be executed with an argument of stop, and the S links with an argument of start.
22.3.2008 14:12 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole

Aha, tak děkuji za vysvětlení (já jsem myslel, že runlevel po sobě "uklidí").

I am always ready to learn although I do not always like to be taught. (W. Churchill)
21.3.2008 09:49 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Použití skriptu místo konsole
Raději bych ještě do toho scriptu implementoval case cyklus pro zpracování argumentů start (prefix S) a stop (prefix K).
V tomto případě bych symlink umístil do /etc/rc0.d/ a dal mu prefix třeba K02

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.