Debian fórum

Dotazy => Všeobecná podpora => Téma založeno: kojot007 kdy 18. 05. 2011, 19:24:18

Název: vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: kojot007 kdy 18. 05. 2011, 19:24:18
V /etc/init.d/ mám jednoduchý skript na vytvoření souboru pojmenovaný "skript":

#! /bin/sh
touch /tmp/soubor
exit 0

práva na něm jsou 755, když vytvořím ve složce /etc/rc2.d/ symlink na tento soubor s názvem S30skript, měl by se dle mého názoru při spuštění systému tento soubor vytvořit. Jenže se tak nestane. Ještě divnější chování je, že pokud zavolám:

update-rc.d skript defaults

tak se po restartu ten skript provede a soubor se vytvoří. I když z ostatních rcX.d odmažu symlinky na ten skript, tak to pracuje. Když to ale přes

update-rc.d

opět smažu a zkusim to zase vytvořit ručně, už to nejde. Co dělám špatně při ručním vytváření toho sybolickýho odkazu?

Díky za odpovědi.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: Hobild kdy 19. 05. 2011, 07:50:52
zkus doinstalit balicek bum (Boot-Up Manager), je to graficke klikatko pro ucely, ktere potrebujes (pouzivas-li Xka)

V konzoli:
Pro 'spuštění': /etc/init.d/<sluzba> start
Pro 'zastavení': /etc/init.d/<sluzba> stop
Pro 'restartování: /etc/init.d/<sluzba> restart

Zamezení spuštění služby při spuštění systému:

update-rc.d <sluzba> remove [odstraní všechny odkazy ke spouštění]

K ověření, že se služba spouští při spuštění systému [ne vždy nutné]

update-rc.d <sluzba> defaults [vytvoří odkazy pro spouštění; vsimni si, ze odkazy pro jednotlive urovne nevytvaris sam, ale pomoci tohoto prikazu; ten umi spoustu veci, ale spousteny skript musi mit vhodny obsah, ktery umozni spravne zarazeni skriptu do systemu - viz man initscript, nebo trebas http://support.dce.felk.cvut.cz/mediawiki/index.php/Vzd%C3%A1len%C3%BD_ssh_p%C5%99%C3%ADstup_v_single-mode_debianu]

Pro zkontrolování seznamu, které služby zrovna běží:
ls /etc/rc5.d

S znamená, že se služba spustí.
K znamená, že se služba nespustí.

Vsimni si, ze cely system je urcen pro SLUZBY (spousteni daemonu), ne pro jednorazove spoustene skripty, ktere neco udelaji a konci. Pro ty je urcen soubor /etc/rc.local.

runlevel 2 je viceuzivatelsky x grafikou, predpokladam, ze pouzivas prave ten.
H.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: kojot007 kdy 19. 05. 2011, 09:06:43
Díky za odpověď,

skript je jen pokusný, abych věděl zda se opravdu spouští nebo ne, proto tam mám jen vytvoření souboru. Mě se ale jedná o to, proč když se symbolický odkaz v rc2.d vytvoří přes update-rc.d tak to funguje bez problémů a když ho vytvořím ručně tak to nefunguje. Pokud by se mi jednalo jen o rozjetí skriptu, tak to přes update-rc.d udělám. Potřeboval bych ale vědět, jakým způsobem to rozjet i ručně vytvořením vlastního smybolického odkazu.
Při vytváření přes update-rc.d se vypíšou tyhle hlášky:

root@debian:~# update-rc.d skript defaults
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'skript' missing LSB tags and overrides

ale odkazy se v jednotlivých adresářích vytvoří:

ls -l /etc/rc2.d/
# výstup
lrwxrwxrwx 1 root root  16 19. kvě 09.16 S18skript -> ../init.d/skript
#výstup

ve všech ostatních rcX.d adresářích odkazy typu [S|K]XXskript smžau a ponechám jen ten v rc2.d.
Když restartuju systém, je vidět, že skript zafungoval (vytvořil se mi soubor). Když pak dám:

root@debian:~# update-rc.d skript remove
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'S18skript' missing LSB tags and overrides
insserv: warning: script 'skript' missing LSB tags and overrides

tak se linky na skripty smažou. Potom vytvořím symbolickej odkaz z /etc/rc2.d/:

cd /etc/rc2.d/
ln -s ../init.d/skipt S18skript

restartuju počítač a skript se nespustil (soubor se mi nevytvořil). Zkoušel jsem to i s různýma prioritama. Runlevel mám defaultně 2, (who -r). To chování prostě nechápu.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: kojot007 kdy 19. 05. 2011, 13:07:19
Dalším zajímavým chováním je, že pokud ten symbolickej odkaz (v /etc/rc2.d/) vytvořenej programem update-rc.d přejmenuju na názve, který má třeba jinou prioritu, tak to stále funguje správně. Např:

root@debian:/etc/rc2.d# mv S18skript S30skript

Po provedení tohoto a restartu systému se skript provede. Z toho mi vyplývá, že program update-rc.d musí dělat ještě něco jiného než jen tvořit ty symbolické linky, protože když je vytvořím ručně, tak ten skript prostě nejde.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: Hobild kdy 19. 05. 2011, 19:15:49
podivej se do toho odkazu, nebudu to psat 2x
H.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: kojot007 kdy 20. 05. 2011, 11:44:07
Fajn, v tom odkazu je rozebíráno, jak vypadá záhlaví skriptu, aby se podle toho určila proirita v názvu odkazu. To ale nemá moc společného s mým problémem - mě je uplně jedno, kolikátý v pořadí se ten skript spustí, potřebuju ten odkaz umět vytvořit ručně tak, aby fungoval. Přes update-rc.d se spustí, ať už v tom skriptu mám záhlaví nebo nemám, ručně to nejde.
Název: Re:vlastní skript v /etc/rc2.d/ se nespouští
Přispěvatel: Hobild kdy 20. 05. 2011, 13:39:58
V tom odkazu se rozebira, jak ma vypadat zahlavi, aby to ten update-rc hodil do vsech potrebnych runlevelu, at uz s priznakem S nebo K. Uvadi se zde nejen runlevely, ale i zavislosti, a jakym zpusobem se tam maji v skriptu uvest. Dalsi podrobnosti v man insserv.

Nevim, proc chces za kazdou cenu ten odkaz vyrabet rucne. Mel by fungovat systemove, pokud spousti nejakou sluzbu. Do skriptu update-rc nebo zdrojaku insserv se musis podivat sam, v tom neposlouzim.

Takze bych ten skript dal tam kam patri (etc/init.d), smazal ze vsech rcX.d, spustil update-rc... a pokud to bude fungovat, dal bych to neresil. A pokud chces nejaky veci generovat dynamicky, nic nebrani vytvoreni vhodnych skriptu, ktere to strci podle nadefinovanych okolnosti do /etc/init.d/ a provedou i aktualizaci pomoci update-rc.

Prijde mi, ze se peres se systemem zbytecne.

H.