vlastní skript v /etc/rc2.d/ se nespouští

Založil kojot007, 18. 05. 2011, 19:24:18

Předchozí téma - Další téma

kojot007

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.

Hobild

#1
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.

kojot007

#2
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.

kojot007

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.

Hobild

podivej se do toho odkazu, nebudu to psat 2x
H.

kojot007

#5
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.

Hobild

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.