> Ali da, želim logirati.
>
>> Jer ako je to da zelis logirati, onda ce ti definitivno *morati* visiti
>> stalno neka scripta (jer tko ce zalogirati? ako ne mislis patchirati javu
>> ili bolje kernel[1]), pa ti je ta originalna "run" scripta bolje rjesenje
>> od neke druge nevezane run scripte. Ili ne vidim sto te muci?
>
> Visi runit. :-) Da budem precizniji, visi supervisor proces (runsv), a kad
> njegov servis ugine, on pokupi status i pozove skriptu finish koja onda
> taj status dobije (zajedno s brojem signala, ako je zbog toga proces
> izasao). Tako da u normalnim uvjetima finish skripta logira.
ah, to je razlika u odnosu na daemontoolse, tamo to radi run scripta nakon
izvrsenja programa. Ako ti to ovdje radi finish scripta, onda ti je puno
jednostavnije, jer cijeli taj dio ne moras brinuti.
sto ti onda tocno fali da prije "exec chroot ... java ..." pozoves:
burekscripta $pidfile $$ &
a burekscripta radi:
- trap alarm i postavi timeout
- iwatch da se pojavi pidfile iz $1
- ukoliko se pojavio pidfile, napravi umount i exita
- ukoliko je alarm timeoutao, zapise to u log, napravi umount i exita
(eventualno napravi "kill -9 $2" ili kakav god handling vec zelis za tu
javusinu ako je PPID isti kao i tvoj)
nema polanja, nema race conditiona, handlea i blokiranje javuse da ne kreira
pid kao i njen crash. Jel ti tu nesto fali?
>> "ps auxf" ce ti nacrtati nesto tipa:
>
> Aha. Nisam nikad koristio ps za takvo crtanje. Nisam ni znao da Linuxov ps
> to može. Obično koristim pstree za to.
tja, meni je pstree dosta beskoristan jer ne ispisuje skoro nista korisno
osim overviewa... Koristenje mi je obicno:
ps auxf | less +/nesto jer mi omogucuje da vidim i tree i context u kojem je
(tipa: aha, vidi od tih 230 apacheova mnogo ih je od ovog usera i trose hrpu
resursa jer su poforkali x CGIeva, koji vise na convert(1) jer svaki
pokusava konvertirati isto 50MB tiff u .ico :)
no, back on topic
>> ono gore je ljepse i citljivije od ovog dolje, to sam htio reci... (a i ima
>> manje potencijalnih problema kada zelis stopati proces sa runit ekvivalentom
>> "svc -d")
>
> Što jest - jest. Ako skripta ostane visiti, mora joj se implementirati da
> dobar dio signala hvata i prenosi svom djetetu. Što me baš ne oduševljava.
da, no nije tako strasno, imas trap i u shellu...
Naravno tu je jos i pitanje who will watch the watchers ako se doticna shell
scripta zblesi :)
>> > Tko mi garantira da u te dvije sekunde PID nece pripasti nekom
>> > novostvorenom procesu?
>>
>> na defaultnom Linuxu, tvoj hardver :) jer PID raste inkrementalno do
>> /proc/sys/kernel/pid_max, pa wraparounda tek onda. Vidi kernel/pid.c
>
> Ma da, ali... Tko mi garantira da se algoritam u pid.c neće promijeniti u
> skoroj budućnosti?
nitko; dapace ako instaliras ranije spomenuti GRSEC postati ce PIDovi
randomatski. Ali spomenuo si da ti nije portabilnost bas bitna, pa rekoh,
evo ti nesto sto radi..
ako zelis biti apsolutno siguran, naravno mozes provjeravati da li
/proc/$pid/stat ima apsolutno isti start_time kao na pocetku, pa te niti pid
reuse nece zeznuti da saznas da je bas javusha umrla i da je netko drugi
zauzeo njeno mjesto...
>> > State-of-the-art od prije 20 godina je nesto blokirajuce sto nece
>> > zahtijevati ekstra proces do kraja izvrsavanja Javetine. :-)
>>
>> state of the art ti je nekompatibilan sa runit tehnologijom, koja se bazira
>> na toj "run" scripti koju ti zelis eliminirati.
>
> Nije, na Solarisu bi lijepo funkcioniralo zato što tamo možeš čekati da
> bilo koji proces izađe, a ne samo tvoja djeca. Nema to veze s runit
> tehnologijom.
pa mozes i na Linuxu, samo sto ti ne volis PTRACE_ATTACH (a koji sluzi
upravo tome, da mozes vidjeti kada neki nevezani process dobije signal /
umre).
>> Nisam bas puno probavao, ali pogledaj rjesnja novija od sysvinit i
>> deaemontoolsa za managanje deamona, tipa upstart ili systemd ili sl.
>
> Mislim da neki od njih izvode ovo što bih ja htio upotrebom ptrace(2)
> poziva. Nisam baš oduševljen. A i nemam povjerenja u stabilnost.
pa, apt-get source systemd i "grep -i ptrace ." nalazi ptrace samo u dijelu
gdje dropa CAP_PTRACE capability :)
O nestabilnosti imas neke indicije ili?
>> Ili napravi svoju reimplementaciju ako te bas toliko veseli, nije
>> bas komplicirano (ali niti kompatibilno sa runitom bas) :
>
> A nije ni potrebno. -)
>
>> - forka jedan logger proces (zato da blokiranje istog npr. disk full ne
>> blokira i system)
>> - salje stdout/stderr od javusa loggeru koji to zapisuje (preko pipe(2))
>
> Kad smo već kod toga, postoji li jedan od takvih loggera koji bi osim što
> piše po lokalnom disku znao te logove i pouzdano prenijeti preko mreže?
multilog (ops, svlogd) i bilo koji pouzdani distribuirani filesystem koji ti
se svidja? ;)
> Pouzdano okvirno znači da će u slučaju da receiver neko vrijeme ne radi
> logovi biti poslani kad proradi.
za idealne vrijednosti "pouzdano", to znaci ili beskonacno memorije ili
beskonacno mjesta na disku.
recimo rsyslogd(8) navodno, sa RELP i bufferingom:
http://www.rsyslog.com/doc/rsyslog_reliable_forwarding.html
>> > Ali, kako rekoh, to je samo moj laicki i potencijalno paranoicni pogled na
>> > stvari.
>>
>> ili ako te vec vrti paranoja, vrti virtualku za svaku javusu i stavi je u
>> inittab(5), to ce ti biti znacajno sigurnije od chroota,
>
> Misliš? U chrootu nema pristupa procesima koji se izvršavaju s podignutim
> privilegijama, a u virtualci ima. Nije da ja želim maknuti proc iz chroota
zasto bi bilo? napravis barebones fs (dakle samo system sa
init, ili cak i bez njega, + java). nema nista suidano, ne vrti se niti
jedan proces osim jave (i eventualno inita, po zelji).
> da java ne bi vidjela koji se sve procesi izvršavaju, nego očekujem da će
> se naći kakav kernel bug u implementaciji koda koji čini proc, pa želim
> maknuti mogućnost interakcije s procom. U virtualci bi taj proc bio
> dostupan.
nije li sigurnije rekompajlirati javu da ne treba /proc?
sto ce joj to uopce? koliko sam shvatio to ti je feature jave kao takve,
(a ne same javusa aplikacije kojoj ne vjerujes in the first place)?
Kako brijem da java radi na OSevima koji /proc nemaju, zasto ga ne
eliminirati i tu?
>> a i ps(1) output ce izgledati cisto i stati na jedan ekran :)
> Aha. Oh, joy!
nije da ce unutra biti ikoga tko bi mogao pokrenuti ps(1), a niti samog
ps(1) :)
>> Da ne spominjemo da ce imati znacajno manje interakcijskih problema jer
>> ce svaka javusa imati svoj svijet koji ce joj izgledati tocno onakvim
>> kakvim zamislja...
>
> Ne vidim baš neku razliku u odnosu na chroot.
pa recimo, svaka instanca javuse moze imati neko svoju inkompatibilnost na
kojoj inzistira (npr. razlicite verzije javuse, librarya, kernela, OSova ...)
a dodatna razlika je sto eventualna provala u javu je vise izolirana (mozes
firewallati razlicite virtualne masine da mogu pristupati razlicitim network
resursima i sl).
>> [1] spomenuti grsec ce ti uz sve ostale prednosti i zabiljeziti koji proces
>> je umro nenormalno (SIGILL, SIGSEGV, ...)
>
> A ako želim nešto i napraviti u slučaju smrti od signala? Što stvarno i
> želim za neke servise, ali ne i za ovu javu, tako da je pitanje čisto
> iz znatiželje. Nije dodatni requirement. :-)
tail -F /var/log/kern.log | grep --line-buffered grsec...signalxxx | xargs -i nesto {} ?
ali obzirom trosis runit koji ima finish scriptu, ne vidim zasto ti je problem
to tamo handleati?