Ajutor rc.local

10 posts / 0 new
Last post
Bamboo
Ajutor rc.local

Salutare la toata lumea, nu am mai fost de mult timp pe aici recunosc.
Poate puteti sa ma ajutati am urmatoarea problema: SO Mandriva 2010
vreau sa lansez din rc.local trei aplicatii diferite dupa ce se initializeaza tot sistemul de operare, spre exemplu:
/var/bin/aplicatie1
/usr/local/aplicatie2
si al treile program porneste prin lansarea unui script: ./aplicatie3.sh start ( acest script necesita privilegii root, lansat ca simplu utilizator nu pleaca)
Daca pornesc cele trei aplicatii manual totul este ok si functioneaza normal, daca restartez calculatorul doar una din aplicatii pleaca automat celelate doua nu.
Sub ce forma trebuie scrise cele trei comenzi in rc.local ca sa porneasca toate cele 3 aplicatii fara probleme?

Multumesc.

N3o
N3o's picture
Da-le un sleep la cele care

Da-le un sleep la cele care nu vor sa porneasca, si anume:

sleep 30s && /var/bin/caca - unde 30s reprezinta valoarea in secunde ( s ) dupa care se va executa comanda urmatoare (dupa &&).

Posibil sa nu porneasca pentru ca nu sunt pornite toate serviciile de care ele depind ca sa porneasca normal.

symbianflo
symbianflo's picture
dar de ce in rc-local?Adica

dar de ce in rc-local?
Adica lansate inainte sau dupa DM?( zici "dupa ce se initializeaza tot sistemul de operare", ok dar la kdm sau gdm mandriva e deja
initializata ....)
daca tot nu zici ce veri sa lansezi la boot , sau DM start, cred ca alea care le vrei din root lansate tre sa le configurezi cu gksu sau kdesu
( in cazul in care vrei sa fie lansate impreuna cu DM start) sau sudo , care tre sa ti le configurezi intii, si cred ca sudo e cel mai indicat ptr ca nu depinde de DM. Deci editeaza-ti etc/sudoers, e primul lucru de facut, dupa aia ar ajunge un daemon-script care sa il lansezi care sa se autolanseze
si care ajunge sa-l plasezi in $HOME.

Dar daca insisti cu rc.local atunci in ai 2 posibilitati:
1:

/etc/rc.d/init.d plasezi executabilul ( sau ln -s, ajunge)

asta in cazul ca vrei sa-l controlezi ,adica start/stop si in timpul sesiunii atunci in rc.local adaugi :

[code]/parcurs/nume-start[/code]

si /sau

[code]/parcurs/nume-stop[/code]

2.

In cazul in care tre sa fie lansat cu privilegii de root adauga "sudo" ( dupa ce ai configurat sudoers)
daca la alea care le vrei lansate din root iti trebuie si interfata grafica atunci numai cu "su + parola "
sau tre sa folosesti kdesu sau gksu/gtksu

deci in cazul asta ( poate pe viitor inveti si sa ceri ajutor si dai mai multe detalii despre tipul scripturilor/aplicatiilor pe care le vrei rulate la start
si care autoruleaza si care nu ....cum ai editat rc.local ...etc),
in rc.local adaugi dupa "[code]touch /var/lock/subsys/local [/code]":

**********************
[code]/var/bin/aplicatie1
/usr/local/aplicatie2
sudo /parcurs/aplicatie3.sh[/code]

***************************

bineinteles ca inainte tre sa-i dai un "chmod +x" la aplicatie3.sh
Acuma io trag la nimereala ca tu nu zici daca inainte sau dupa DM start vrei chestiile astea....
mai multe deatalii mai bine te putem ajuta ...
salut

@N3o rc-local are prioritatate mult inferioara decit rc.init.d deci nu cred dar poate ca ai derptate tu .


http://www.mandrivausers.ro/ MRB aint no shit , :p Linux user number 507107 Nu dați banii pe prostii, puneți Linux pe PISI ![ARLUG]

Unix is user-friendly. It’s just very selective about who its friends are

Patkos Csaba
Na ... pentru configurare

Na ... pentru configurare potrivita iata un mini-tutorial de linu init:

* Tot ce se ruleaza prin rc.local sau /etc/init.d se ruleaza implicit ca "root", exceptie fac scripturile care seteaza explicit alt user
* /etc/init.d este doar un loc (spatiu) unde stau scripturile scripturile. **Acest folder nu este rulat niciodata de system la pornire.** Toate scripturile ar trebui sa primeasca trei parametri (start, stop, restart) pentru a putea fi controlate cum trebuie
* Fiecare script de acolo este rulat la un anume nivel de initializare a sistemului numit "runlevel" (), dar numai daca acest lucru este setat. Setarea se poate face in doua moduri: prin comanda "chkconfig" - varianta recomandata - () sau prin crearea de linkuri potrivite in folderele de runlevel (/etc/rc.d/rcX.d - unde X reprezinta runlevel) dupa forma urmatoare: AXXnume_link, unde A reprezinta actiunea (S pentru start, K pentru kill/stop), XX reprezinta numarul de ordinte (ordinea in care sunt executate scripturile) si nume_link este un nume arbitrar dat linkului catre un script din /etc/init.d
* rc.local este rulat atat la finalul runlevel-urilor 2, 3, 4 si 5, existand un S99local in toate folderele mentionare ce apeleaza /etc/init.d/rc.d/rc.local

Sper ca am fost suficient de explicit, acum ar fi clar cum si unde se pune scriptul ce doresti.

Csabi′s BLOG

Linux registered user # 457717

Bamboo
In primul rand multumesc

In primul rand multumesc pentru ajutor. Scuzati daca sunt atehnic in exprimare dar cunostintele mele de linux se reduc doar la citit de how to-uri si teste.
Sa revin la subiect sa va explic ce am reusit pana cum:
Am renutat la ideea cu rc.local, am creat in /etc/rc.d/init.d/ un script care sa imi porneasca aplicatia1 si 2 din exemplul anterior, am adaugat scriptul in chkconfig ca sa controleze acesta pornirea aplicatiilor in cauza si totul este ok acum, dupa orice restart cele doua aplicatii pornesc fara probleme.
Problema mea ramane a treia aplicatie care se porneste cu un script , este de fapt o aplicatie java.
Am creat un link in /etc/rc.d/init.d/ catre locul real al scriptului de pornire a aplicatiei, l-am adaugat si in chkconfig iar in rc.local am scris linia /etc/init.d/aplicatie3 start
va prezint aici scriptul in cauza

#!/bin/bash
# chkconfig: 345 80 20
# description: autostart script
# What your script does (not sure if this is necessary though)
# processname: caproxy

case "`uname -s`" in

'CYGWIN'*)
SYSTEM="Cygwin"
;;

'Linux')
SYSTEM="Linux"
;;

'OSF1')
SYSTEM="Tru64"
;;

'SunOS')
SYSTEM="Solaris"
;;

*)
SYSTEM="Unknown"
;;

esac

PID_FILE=cardservproxy.pid

serverpid() {
if [ -f $PID_FILE ]; then
if [ "$SYSTEM" = "Cygwin" ]; then
PID=`cat $PID_FILE`
if [ "x"$PID != "x" ]; then
if [ -n "`ps | grep $PID`" ]; then
cat $PID_FILE
return
fi
fi
else
if [ "$SYSTEM" = "Solaris" ]; then
if [ -n "`cat $PID_FILE | xargs ps -p | tail +2`" ]; then
cat $PID_FILE
return
fi
else
if [ -n "`cat $PID_FILE | xargs ps | tail -n +2`" ]; then
cat $PID_FILE
return
fi
fi
fi
fi
echo -n 0
}

echoresult() {
echo -n " "
$MOVE_TO_COL
echo -n "[ "
echo -n $1
echo " ]"
shift
if [ "$#" != "0" ] ; then echo "$1" ; fi
}

case "$1" in

'start')
echo -n "Starting CardServProxy:"
if [ "`serverpid`" != "0" ]; then
echoresult FAILED "An instance of the server is already running"
exit 1
fi
java -Dsun.net.inetaddr.ttl=0 -jar lib/cardservproxy.jar > log/cardserv-sysout.log 2>&1 &
echo $! > $PID_FILE
sleep 3
ERR=`cat log/cardserv-sysout.log | grep '[Ee]rror\|[Ee]xception\|[Ff]ailed\|not found'`
if [ "$ERR" ]; then
echoresult FAILED
cat log/cardserv-sysout.log
OP=`serverpid`
if [ $OP != "0" ]; then
kill $OP
fi
rm $PID_FILE
exit
else
echoresult OK
fi
;;

'stop')
echo -n "Killing Proxy:"
OP=`serverpid`
if [ $OP != "0" ]; then
rm $PID_FILE
kill $OP
echoresult OK
else
echoresult FAILED "Cannot determine pid"
fi
;;

'dump')
echo -n "Sending SIGQUIT:"
OP=`serverpid`
if [ $OP != "0" ]; then
kill -3 $OP
echoresult OK
else
echoresult FAILED "Cannot determine pid"
fi
;;

'status')
OP=`serverpid`
if [ $OP = "0" ]; then
echo "Proxy is stopped"
exit 1
else
echo "Proxy (pid $OP) is running..."
exit 0
fi
;;

*)
echo "Usage: $0 {start|stop|status|dump}"
exit 1
;;

esac

exit $?

Eu am modificat in script doar partea de inceput pentru a putea fi compatibil si cu chkconfig.
Daca pornesc scriptul din folderul aplicatie porneste fara erori, daca incerc sa il pornesc din /etc/rc.d/init.d/ aplicatie3 start imi da urmatoarea eroare

line 78: log/cardserv-sysout.log: No such file or directory
cat: log/cardserv-sysout.log: No such file or directory

Am sa mai sap sa vad unde anume gresesc, multumesc oricum pentru ajutorul acordat.

Bamboo
Cu eroare am rezolvat: am

Cu eroare am rezolvat: am creat un link in /etc/rc.d/init.d/log catre folderul /log al aplicatie si acum porneste si din /etc/rc.d/init.d la comanda aplicatie3 start .
Singura mea problema acum ramane ca la restart tot nu porneste automat, probabil ca linia care am pus-o in rc.local /etc/rc.d/init.d/aplicatie3 start trebuie sa se afle in alta parte

Patkos Csaba
In primul rand NU baga nimic

In primul rand **NU** baga nimic altceva in /etc/init.d decat scripturi. Alte foldere nu au ce cauta acolo. Pentru a rezolva problema ta, in partea de start a scriptul, inainte de linia `java -Dsun.net.inetaddr.ttl=0 -jar lib/cardservproxy.jar > log/cardserv-sysout.log 2>&1 &` baga si tu un `cd /cale/catre/folderul/scriptului` si va rula cum trebuie, ca de fapt acolo este comanda de java!
Aceeasi modificare de "cd..." trebuie sa o faci peste tot in script unde se apeleaza chestii referitoare la el prin asociere relativa a cailor.

Daca, dupa aceasta modificare, poti porni scriptul ca root prin comanda `/etc/init.d/nume_script start`, inseamna ca totul e bine si tot ce tre' sa faci este sa il setezi cu chkonfig sa ruleze. Ceva de genul ar trebui sa fie suficient: `chkconfig --level 5 nume_script on` (nota: aici NU se pune calea, doar numele scriptului din /etc/init.d pentru ca systemul cauta automat in /etc/init.d). Nivelul 5 este cel de interfata grafica, daca nu folosesti interfata grafica cauta ceva nivel mai potrivit pentru tine (vezi linkul din mesajul meu precedent).

Csabi′s BLOG

Linux registered user # 457717

Bamboo
Multumesc mult pentru ajutor,

Multumesc mult pentru ajutor, am procedat cum ati spus in postul anterior cu mentiunea ca si la liniile din script unde se indica calea spre `log/cardserv-sysout.log` am scris calea completa catre fisierul in cauza.
Acum pornesc toate cele trei aplicatii fara nici o problema automat. Maine am sa incerc sa fac la fel un script care sa verifice la un anumit interval de timp functionarea acestor aplicatii iar in caz ca s-au blocat si nu mai sunt functionale sa le reporneasca automat, daca ma impotmolesc am sa va mai deranjez pe forum cu intrebari.

Inca odata multumesc, o seara buna.

Patkos Csaba
Pentru rulare periodica de

Pentru rulare periodica de aplicatii/scripturi vezi `/etc/crontab` si manualele de crontab `man crontab` si `man 5 crontab`.

Csabi′s BLOG

Linux registered user # 457717

symbianflo
symbianflo's picture
ma bucur ca s-a rezolvat

ma bucur ca s-a rezolvat problema , doar ca eu ramin la parerea mea , in loc sa umbli la init &co cred ca cel mai elegant era un daemon
care porneste odata cu utilizatorul tau in $HOME , sa nu va suparati pe mine dar cred ca e mai usor sa sifonezi init.d cu runnlevel daca nu intelegi ce se petrece acolo si faci copy/paste, oricum la scriptul tau nu cred ca trebuie sa fie rulat din root , CRED ar ajunge ca utilizatorul care il lanseaza sa aiba puteri pe net-applet (draknetcenter).


http://www.mandrivausers.ro/ MRB aint no shit , :p Linux user number 507107 Nu dați banii pe prostii, puneți Linux pe PISI ![ARLUG]

Unix is user-friendly. It’s just very selective about who its friends are