Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: alfonz19 19 Července 2012, 13:52:22

Název: jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: alfonz19 19 Července 2012, 13:52:22
Nevím jestli jsem to v předmětu napsal dostatečně srozumitelně, ale dělal jsme co jsem mohl...

Mám skript, který chci, aby se spouštěl pár sekund, ale nezajímá mne jeho (nijaký) textový výstup, a nechci mít otevřený terminál ve kterém běží. Otevřu terminál, NĚCO NAPÍŠU, skript se spustí, zavřu terminál a skript si vesele běží dál a dělá svou práci. Jak vypadá to NĚCO?

Mám za to, že je třeba spustit nový bash, ve kterém tento skript poběží, ale nemohu si vzpomenout ani vyguglit jak to udělat. O možnosti nohup vím, ale existuje i jiná alternativa, kterou bych rád použil.

Předem dík za radu.
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: pacholik 19 Července 2012, 14:34:21
nohup (http://www.abclinuxu.cz/clanky/unixove-nastroje-16-getopts-time-nohup#nohup)
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: beer 19 Července 2012, 16:31:35
To je zajímavé. Jaký je funkční rozdíl mezi použítím

Kód: [Vybrat]
nohup program
a

Kód: [Vybrat]
program &?

Například v /etc/rc.local používám
Kód: [Vybrat]
edge -d neco -a nejakaipadresa  -c neco -k klic -s nejakamaska -l 88.86.108.50:82 &
Byl by rozdíl v něčem, kdybych tam dal například:
Kód: [Vybrat]
nohup edge -d neco -a nejakaipadresa -c neco -k klic -s nejakamaska -l 88.86.108.50:82 &> /dev/null < /dev/null &?
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: ntz_reloaded 19 Července 2012, 17:41:44
sak vyzkousej vytvorit skript kde bude

Kód: [Vybrat]
#!/bin/bash

tty | logger;
sleep 1000;
exit 0;

a spust ho z terminalu s & a terminal zavri a potom pomoci nohup a samozrejme se kouki pomoci ``tail /var/log/messages'' kde bezi ;)

myslim, ze to zodpovi vsechny otazky
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: beer 20 Července 2012, 04:01:26
nezodpoví, v obou případech

Kód: [Vybrat]
$ tail /var/log/messages
tail: „/var/log/messages“ nelze otevřít pro čtení: Adresář nebo soubor neexistuje
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: Avogadrus 20 Července 2012, 08:49:34
& spustí na pozadí jako potomka, při ukončení terminálu se pokusí zabít děti. Nohup mu říká, aby tenhle signál ignoroval. Možná je toho víc, ale sem si vědom jen tohohle.
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: beer 20 Července 2012, 09:15:26
& spustí na pozadí jako potomka, při ukončení terminálu se pokusí zabít děti. Nohup mu říká, aby tenhle signál ignoroval. Možná je toho víc, ale sem si vědom jen tohohle.

Díky za vysvětlení.
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: ntz_reloaded 20 Července 2012, 10:04:49
nezodpoví, v obou případech

Kód: [Vybrat]
$ tail /var/log/messages
tail: „/var/log/messages“ nelze otevřít pro čtení: Adresář nebo soubor neexistuje
hmm .. radsi uz nic nezkousej prosim
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: GdH 20 Července 2012, 12:24:40
ntz by si měl uvědomit, že Ubuntu není Suse (messages se nám před nějakým časem ztratily) a beer se může kouknout do /var/log/syslog ;)
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: ntz_reloaded 20 Července 2012, 12:39:28
ntz by si měl uvědomit, že Ubuntu není Suse (messages se nám před nějakým časem ztratily) a beer se může kouknout do /var/log/syslog ;)
oh god ... /var/log/messages je snad vsude, nejen v suse ..

to ze to v ubuntu neni je jen dalsi znamka ze &*^%$#@
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: alfonz19 23 Července 2012, 10:35:16
díky všem za informace a odpovědi.

Zeptám se ještě na jednu věc. Jak už jsem psal, tak o nohup možnosti vím, ale nebaví mne nutnost přesměrovávat data do souboru v tmpu či do /dev/null

jaký je rozdíl mezi:

nohup sleep 10min > /dev/null &

a

bash -c 'sleep 10 min' &

kromě toho, že v druhém případě se (měl by se) spustí příkaz v novém bashi (jakkoli jsem jeho pid nenašel)? Předem díky
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: ntz_reloaded 23 Července 2012, 10:41:27
...

jaký je rozdíl mezi:

nohup sleep 10min > /dev/null &

a

bash -c 'sleep 10 min' &



sak vyzkousej vytvorit skript kde bude

Kód: [Vybrat]
#!/bin/bash

tty | logger;
sleep 1000;
exit 0;

a spust ho z terminalu s & a terminal zavri a potom pomoci nohup a samozrejme se kouki pomoci ``tail /var/log/messages'' kde bezi ;)

myslim, ze to zodpovi vsechny otazky

^^ budu se opakovat ..
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: jmp 23 Července 2012, 11:13:31
pro lenochy
/var/log/syslog
Citace
Jul 23 10:47:51 Ubuntu logger: /dev/pts/1
Jul 23 10:47:51 Ubuntu logger: není TTY
druhy pokus je s nohup...
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: starenka 23 Července 2012, 22:07:43
screen???
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: alfonz19 24 Července 2012, 08:14:10
fajn, chápu. Můžu ještě pod-otázku?

Když jsem vzal tvůj skript


#!/bin/bash

tty | logger
sleep 10s;
exit 0;


a spustil, tak ok.


Pokud jej ale upravím, že výstup tty nebude vypsán do logu


#!/bin/bash

tty
sleep 10s;
exit 0;


tak exit 0 mi neukončí skript, ale narozdíl od předchozího příkladu rovnou terminál ve kterém jsem jej spustil, Bude to nějaká banalita, tak sorry za hloupé otázky, ale nějak to nechápu.
Název: Re:jak spustit skript v "novém bashi" -- spuštění skriptu na pozadí.
Přispěvatel: jmp 24 Července 2012, 08:46:27
fajn, chápu. Můžu ještě pod-otázku?

Když jsem vzal tvůj skript


#!/bin/bash

tty | logger
sleep 10s;
exit 0;


a spustil, tak ok.


Pokud jej ale upravím, že výstup tty nebude vypsán do logu


#!/bin/bash

tty
sleep 10s;
exit 0;


tak exit 0 mi neukončí skript, ale narozdíl od předchozího příkladu rovnou terminál ve kterém jsem jej spustil, Bude to nějaká banalita, tak sorry za hloupé otázky, ale nějak to nechápu.
možná vás to překvapí, ale ten výpis do logu byl záměr (protože to jinak nepoznáte, v čem to vězí...)