Terminal bezárásakor agyoncsap minden folyamatot az Ubuntu?

 ( Ritter | 2013. október 23., szerda - 12:46 )

Miért lő le minden folyamatot az Ubuntu egy desktopról indított terminal bezárásakor?
egyetlen sudo /etc/init.d/crasplan-t kellene elindítani egy szimpla scriptből. De amint bezáródik a gnome-terminal ablak egyből leáll a crashplan is.
Mit kell írni a scriptbe, hogy ne lője le a rendszer?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

screen /etc/init.d/crasplan

sudo /etc/init.d/crasplan & -nel próbáltam háttérbe rakni.
De így sem jó:
[screen is terminating]

Próbáld meg így: screen -d -m

Úgy is próbáltam, plusz még -S kapcsolóval, hogy neve is legyen.

Gondolom, SIGHUP-ot kap a gyermekfolyamat. Én így szoktam:

programom & exit

A másik lehetőség:

nohup programom </dev/null &>/dev/null &

aztán bezárhatod a terminált.


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha egy megnyitott terminálból indítom akkor jó, de ha desktop linkről majd 'futtatás terminálban' akkor ugyanúgy leáll a crashplan mint korábban.

Nem tudom, mi ez, de muszáj terminálban futtatni?

Lehet, én elkezdeném debugolni, mi is történik. Például írnék egy olyan scriptet, amelynek a signal handler-ében file-ba tenném vagy zenity-vel a képernyőre feldobnám, milyen signalt kapott. Egyedül a SIGKILL ellen nem lehet így védekezni, de ezzel nyilván nem él az adott desktop környezet. Ha megvan, milyen signalt kell elkapni, akkor a rendes scriptbe bele kell írni, hogy arra immunis legyen.


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Egyszerűen annyi, hogy nem akarjuk állandóan futtatni a crashplan-t és az időszakos backup sem megoldás, mert van amikor egész nap mehet máskor csak éjjel. Annál a gépnél ülő munkatársnak kell egy ikon a desktopra, ha nem dolgozik elinditja. Ha beirná egy terminálba, hogy sudo /etc/init.d/crashplan start akkor azzal problémamentesen elindulna, utána be is lehetne zárni a terminált, akkor nem áll le. De sajnos ennél a gépnél ülő munkatárs védőoltást kapott parancssor használata ellen.

És mi történik, ha parancsikonnal indítod, de azt mondod neki, ne használjon hozzá terminált? (A desktop környezetnek ez egy tökéletesen haszontalan funkciója egyébként. Amihez kell terminál, arra is azt mondom, hogy nem kell, majd xfce4-terminal -e valami formában indítom. De neked még csak nem is kell terminál szerintem. Minek?)


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Akkor még a sudo jelszót sem lehet beírni. Persze lehetne gksudo-t használni. Ki fogom próbálni.

Egy érdekesség:
Ha beirom a script végére, hogy sleep 60 akkor egy percig működik a crashplan, utána leáll.

Ebből az látszik, hogy a scriptből kilépéskor hal meg. Ezek szerint a crashplan szülője küldi - gondolom - a SIGHUP-ot. Tehát vagy a crashplant indítod nohuppal, vagy a scriptedet futtatod mindaddig, amíg ez a crashplan fut. Például percenként ránézel pgrep-pel. Ha benvan a process, újabb sleep 1m, ha nincs benn, akkor ki lehet lépni.

Mindenképpen megoldható, sok ötlet "elhangzott" itt, rajtad áll, hogyan csinálod.


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem használok gnome-t vagy mi fene van ubuntun, de gondolom ott is lehet az ikon tulajdonságainál beállítani, hogy futtatás más felhasználó nevében. Így nem kell terminál ablak, csak indításkor bekéri a jelszót, ha jól értelmeztem, hogy miért kell a terminál.

man nohup


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

További lehetőséget, hogy a scripted egy trap paranccsal elkapja a SIGHUP-ot, végrehajtásként nem csinál semmit, így nem fog elpusztulni, ha jön a HUP signal.


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

disown

~~~~~~~~
Linux 3.2.0-4-486
Debian 7.1

Vagy at now.

at now <<< parancs

:)

A mókás az, hogy windows alatt működik a legjobban :D

Még egy tipp:

ikon parancsa:

sudo /usr/local/bin/starterszkript.sh

/usr/local/bin/starterszkript.sh tartalma:

echo /etc/init.d/crasplan | at now

Ez a gnome-terminal helyes viselkedése...

Ha már Ubuntu: ALT+F2-t próbáltad már?

Sajnos ennél a gépnél ülő munkatárs számára az ALT+F2 nem alternatíva.

Sracok, alap UNIX:

Folyamat hatterben futtatasa:

process &

man bash:
" If a command is terminated by the control operator &, the shell exe-
cutes the command in the background in a subshell. The shell does not
wait for the command to finish, and the return status is 0. Commands
separated by a ; are executed sequentially; the shell waits for each
command to terminate in turn. The return status is the exit status of
the last command executed."
(De ezt megcsinalha a csh, zsh, ksh, barmi)
Vagy, ha nem akarod, hogy a hangupra halgasson:

nohup process

man nohup:

" The nohup utility invokes utility with its arguments and at this time
sets the signal SIGHUP to be ignored. If the standard output is a termi-
nal, the standard output is appended to the file nohup.out in the current
directory. If standard error is a terminal, it is directed to the same
place as the standard output."

Ööö... Te olvasol is, vagy beéred az írás lehetőségével? ;)


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ne szidd le, én is helyből az új hozzászólásra akartam kattintani, de aztán megembereltem magam, mondván hátha van más is aki az alapvető dolgok viselkedésével tisztában van, és nálam gyorsabb volt. (Bár az is tény, hogy láttam már olyan shellt is, amelyik a háttérprocesszt automatikusan nohup-pal indította - vagy kapcsolható volt? A franc se emlékszik ennyire pontosan.)

Nem az volt a bajom, hogy válaszként vagy újként írja, hanem az, hogy ezekről már volt szó fentebb.


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

ksh-ban (OpenBSD-ben biztosan) van egy "set nohup" parancs.


Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)

"set -o nohup" lesz az, nem?

Bocs, sajtóhiba. Igen, set -o nohup. Ha jól emlékszem, ezt megelőzően HPUX-on találkoztam vele... :D


Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)