Avatar billede htm Nybegynder
14. maj 2003 - 22:51 Der er 27 kommentarer og
2 løsninger

Service på Linux

Hej

Jeg har et lille problem!

Jeg har installeret apache på min linux og det virker fint - ingen problemer! Men jeg ville gerne have den til at
1. starte automatisk når jeg genstarter
2. Ligge sig som en lettilgængelig service i /etc/init.d

Jeg har så fundet et script og det fungerer fint bortset fra at min apache bliver ikke stoppet når jeg skriver /etc/init.d/httpd stop

start og status virker fint...

Scriptet jeg har forsøgt brugt er dette: http://www.cs.duke.edu/~xue/linux.html

mit spørgsmål er så:

Hvordan får jeg dette script til at virke så det også tager virker med stop?

Hvordan får jeg apache til at starte når jeg genstarter min linux?

Og hvordan får jeg lavet det samme med min mysql?

Min Linux er Trustix 1.5 med kerne 2.4
Avatar billede skau Nybegynder
14. maj 2003 - 23:22 #1
lav dette script i /etc/init.d og kald det apache
lav 2 symbolske links i /etc/rc3.d
ln -s /etc/init.d/apache /etc/rc3.d/S98apache
ln -s /etc/init.d/apache /etc/rc3.d/K10apache


Her følger scriptet

APACHE_HOME=/usr/apache
CONF_FILE=/etc/apache/httpd.conf
PIDFILE=/var/run/httpd.pid

if [ ! -f ${CONF_FILE} ]; then
        exit 0
fi

case "$1" in
start)
        /bin/rm -f ${PIDFILE}
        cmdtext="starting"
        ;;
restart)
        cmdtext="restarting"
        ;;
stop)
        cmdtext="stopping"
        ;;
*)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac

echo "httpd $cmdtext."

status=`${APACHE_HOME}/bin/apachectl $1 2>&1`

if [ $? != 0 ]; then
        echo "$status"
        exit 1
fi
exit 0
Avatar billede htm Nybegynder
14. maj 2003 - 23:30 #2
OK tak det virker fint :-)

Men er det ikke muligt at modificere det jeg linkede til? Der er der mulighed for status og der bliver skrevet [OK] og [FAILED] afhængig af hvad sker!

Hvad betyder de tal der er bag symbol linket?
Avatar billede skau Nybegynder
14. maj 2003 - 23:37 #3
Når der står S (i uppercase) bliver scriptet kaldt under start - med start som argument. 98 bestemmer blot rækkefølgen
Når der står K (i uppercase) bliver scriptet kaldt under nedlukning (kill) med stop som argument - derfor kan et script der checker på argumentet om der står start eller stop benyttes i begge situationer.
rc3.d er den runlevel det skal køres i
rc1.d = runlevel 1 (før singleusermode)
rc2.d = runlevel 2 (efter singleusermode men før netværk startes)
rc3.d = runlevel 3 efternetværk er startet op
Scriptene bliver afviklet i den rækkefølge de dukker op med ved en ls -l
Avatar billede htm Nybegynder
14. maj 2003 - 23:39 #4
OK nice - tak for den forklaring!

Kunne du modificere det andet script? Så det også virkede med stop?
Avatar billede skau Nybegynder
14. maj 2003 - 23:39 #5
Hvis du laver en cat /etc/init.d/httpd og vedhæfter output - kan jeg da godt lige kigge på dit gamle script
Avatar billede htm Nybegynder
14. maj 2003 - 23:40 #6
#!/bin/bash
#
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#              HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache/log/httpd.pid
# config: /etc/httpd.conf
# Source function library.

. /etc/rc.d/init.d/functions

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Path to the apachectl script, server binary, and short-form for messages.
httpd=/usr/local/apache/bin/httpd
prog=httpd
RETVAL=0
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        daemon $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/httpd
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        killproc $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /usr/local/apache/log/httpd.pid
}
reload() {
        echo -n $"Reloading $prog: "
        check13 || exit 1
        killproc $httpd -HUP
        RETVAL=$?
        echo
}
# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        status)
                status $httpd
                RETVAL=$?
                ;;
        restart)
                stop
                start
                ;;
        condrestart)
                if [ -f /usr/local/apache/log/httpd.pid ] ; then
                        stop
                        start
                fi
                ;;
        reload)
                reload
                ;;
        graceful|help|configtest|fullstatus)
                $apachectl $@
                RETVAL=$?
                ;;
        *)
                echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
                exit 1
esac

exit $RETVAL
Avatar billede skau Nybegynder
14. maj 2003 - 23:44 #7
kan du lige forsøge at skrive cat /etc/rc.d/init.d/functions;which killproc
Avatar billede htm Nybegynder
14. maj 2003 - 23:47 #8
Du fil er for stor til at poste her, har smidt den her: http://80.196.140.221:81/functions
Avatar billede skau Nybegynder
14. maj 2003 - 23:56 #9
Det ser sq ok ud - men det er ikke en særlig pæn måde at lukke ned på.
Koden ser ikke ud til at have fejl.

Hvis mit script virker uden at du har lavet ændringer - så kigger dit det gamle efter apache på et forkert sted.
Mit script går ud fra apache ligger under /usr/apache - hvorimod dit går ud fra det ligger i /usr/local.
Hvis mit virker skal du ændre følgende:

linien
httpd=/usr/local/apache/bin/httpd
til
httpd=/usr/apache/bin/httpd

linien
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /usr/local/apache/log/httpd.pid
til
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/apache/log/httpd.pid

og linien
        if [ -f /usr/local/apache/log/httpd.pid ] ; then
til
        if [ -f /var/apache/log/httpd.pid ] ; then
Avatar billede htm Nybegynder
14. maj 2003 - 23:59 #10
OK jeg har modificeret dit script til at pege de rigtige steder!

Apache er installeret i /usr/local/apache
http.pid ligger i /usr/local/apache/log/httpd.pid
Avatar billede htm Nybegynder
15. maj 2003 - 00:00 #11
Den skriver fint httpd stopped [OK]

men hvis jeg laver en ps -ax ligger den stadig og kører...
Avatar billede skau Nybegynder
15. maj 2003 - 00:03 #12
har PID ændret sig ?
(er den det samme som før du kalder stop)?
Avatar billede htm Nybegynder
15. maj 2003 - 00:04 #13
Nej PID er det samme
Avatar billede skau Nybegynder
15. maj 2003 - 00:07 #14
hvad siger en ls -l /var/lock/subsys/httpd efter du har hørt stop
og kan du køre kill -9 PID (hvor PID er httpd's pid)
Avatar billede htm Nybegynder
15. maj 2003 - 00:10 #15
/bin/ls: /var/lock/subsys/httpd: No such file or directory

Og jeg kan godt dræbe den via kill
Avatar billede skau Nybegynder
15. maj 2003 - 00:12 #16
Det var satans - det er netop det dit script gør - da lock filen er væk betyder det at dens kill -9 er gået godt !

Jeg bliver nødt til at slutte nu - men jeg kigger videre på det imorgen.

l8r
Avatar billede htm Nybegynder
15. maj 2003 - 00:20 #17
Helt i orden - smutter også selv i seng nu

Jeg fik dog lige tilrette scriptet så den peger på /usc/local/apache/logs/httpd.pid i stedet :-) men ingen forskel

httpd.pid bliver slettet og det samme gør lock-filen , men apache kører stadig!
Avatar billede skau Nybegynder
15. maj 2003 - 08:09 #18
har du checket om det pid der står i /usr/local/apache/logs/httpd.pid er det rigtige ?
Avatar billede htm Nybegynder
15. maj 2003 - 11:56 #19
Det er det rigtige PID
Avatar billede skau Nybegynder
15. maj 2003 - 16:32 #20
Så er jeg ved at løbe lidt tør for ideer - Vi kan tilrette det første script jeg sendte så du får en status melding
Avatar billede htm Nybegynder
15. maj 2003 - 18:04 #21
OK det ville være kanon med denne tilretning - det skulle være nok :-)

den status i scriptet der viser alle PIDs apache kører på
Avatar billede htm Nybegynder
19. maj 2003 - 22:48 #22
Kunne du udvide scriptet til også at omfatte status?
Avatar billede htm Nybegynder
20. maj 2003 - 21:07 #23
skau>> Er du her stadig?

Jeg har lige et lille tillæsgspørgsmål: Jeg har lige kommet til at skrive
bash# rm /etc/init.d
dermed har jeg intet init.d bibliotek og alle de filer der lå i dette bibliotek er væk :(

Er det muligt at jeg kan få dette tilbage?
Avatar billede skau Nybegynder
20. maj 2003 - 23:00 #24
Er det en RedHat 9 ?
Avatar billede htm Nybegynder
20. maj 2003 - 23:02 #25
Glem mit sidste spørgsmål - jeg fik oprettet det igen ved hjælp af en ln -s /etc/rc.d/init.d

skau>> Nej det er en Trustix 1.5 med kerne 2.4
Avatar billede htm Nybegynder
21. maj 2003 - 19:26 #26
Kunne du integrere i dit script så jeg også kunne bruge status?
Avatar billede htm Nybegynder
25. maj 2003 - 14:00 #27
Har du opgivet eller glemt mig?
Avatar billede htm Nybegynder
01. juni 2003 - 22:25 #28
Hmm ok - så lukker jeg
Avatar billede skau Nybegynder
02. juni 2003 - 11:20 #29
Jeg har ikke glemt dig - jeg har også noget dårlig samvittighed, men jeg er ved at flytte en stak solaris servere til større HW og nyt netværk - så jeg er lidt bundet op.
Der kommer et script såsnart jeg har lidt tid
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester