Avatar billede petercal Nybegynder
02. december 2006 - 15:38 Der er 4 kommentarer

Process startet via Net::Telnet stopper når session brydes

Jeg har et problem jeg ikke kan blive klog på. I forbindelse med backup af en SQL db på Solaris 9 skal jeg som root stoppe en process v.h.a et script med parameter stop, tage backuppen og starte processen igen med samme script med parameter start.
Det virker perfekt når jeg er logget ind fx via PuTTY eller SSH.
Problem : Jeg har lavet et perl script der gøt det samme for mig fra min PC. Det logger ind på boxen med Net::Telnet og gør så nøjagtig de samme ting, som jeg ellers gør manuelt. Og jeg han se i min log at min process bliver startet ok. Nu er problemet så at når mit perl script logger af igen, stopper den process jeg startede. Processen bliver i startscriptet startet med &.
Jeg forstår simpelthen ikke hvad forskellen er på at køre vis PuTTY og fra en Net::Telnet session.
Avatar billede skau Nybegynder
02. december 2006 - 17:56 #1
& betyder kør i baggrunden ikke at den skal fortsætte når du logger ud. Brug istedet nohup foran din kommando - nohup (nohup) har ejerskab af din subproces og den vil derfor ikke dø når du logger ud.

eks.
scriptet database skal startes med parametren start gennem nohup:

nohup $PATH/database start &

nohup vil danne en fil nohup.out der indeholder std out af din proces
Avatar billede skau Nybegynder
02. december 2006 - 17:59 #2
Lidt ekstra info
en proces der er startet med & (i baggrunden) kan kaldes til forgrunden med fg
std out kan omdirigeres med >> outfil
std error kan omdiriges med 2> errfil
std error kan skrive i samme fil som std out med >> outfile 2>&1
Avatar billede petercal Nybegynder
02. december 2006 - 20:31 #3
Hej skau, godt bud men det virker desværre ikke
snip fra perl script log, hvor jeg lukker Storage server ned og starter den igen med nohup (inden i ipworks.ss startes processen med &)
Det ses at både ipwss og tomcat kører
# ./ipworks.ss stop ; sleep 5; ps -ef | grep ipwss
stopping IPWorks Storage server.
IpwAdm> Login to server successful.
Server is shutting down
Exiting.
cd /etc/init.d/ ; pwd ; nohup ./ipworks.ss start ; sleep 10; ps -ef | grep ipwss
    root  3900  3840  0 20:26:48 pts/1    0:00 grep ipwss
# /etc/init.d
Sending output to nohup.out
    root  3905    1 21 20:26:48 pts/1    0:09 java -server -DApp=ipwss -Xmx512m -Xms128m -cp /usr/bin:/opt/ipworks/java/ipwor
    root  3920  3840  0 20:26:58 pts/1    0:00 grep ipwss
# cd /etc/init.d/ ; nohup ./ipworks.tomcat start ; sleep 10; ps -ef | grep jakarta
Sending output to nohup.out
    root  3964  3840  0 20:27:10 pts/1    0:00 grep jakarta
    root  3932    1 10 20:27:00 pts/1    0:03 /usr/java/bin/java -Djava.endorsed.dirs=/usr/local/jakarta-tomcat-4.1.18-LE-jdk
#
efter perlscriptet er logget af tester jeg med en telnet fra PuTTY
og begge processer er pist væk ??
# ps -ef | grep ipwss
#
# ps -ef | grep jakarta
#
mvh
Peter
Avatar billede skau Nybegynder
03. december 2006 - 13:19 #4
Hmm så vidt jeg kan de så ligger dine scripts i init.d her ligger der normalt scripts der kaldes fra init gennem et symbolsk link fra rc3.d (eller rc1 eller rc2 alt efter runlevel)
Disse scripts skal ikke stå og hænge - de skal starte en proces og så exitte - init benytter exitkoden til at fastslå om starten (eller stopningen) er gået godt.


Er der nogen fejl i din tomcat log - da den ihvertfald skal overleve at du logger ud og den skal normalt ikke startes med nohup. ipwss kender jeg ikke - men det ser ud til at være et normalt java program.

Her et lille forslag
JEg ved ikke om alle de scripts der kaldes af dit perl program har sat hvilken intrepreter de skal bruge - prøv derfor (hvis det er muligt evt i et preprod miljø) at lave et almindeligt shell script (der svarer til din login shell) der starter skidtet, prøv så at logge ud - det er før set at når du kalder fra din putty står du i en ksh eller bash shell og dit script kører i en perl shell.
Scriptet vil sikkert være meget lig dit perl script - her er hvad jeg ud fra dit output kan gætte mig til (har byttet om på tomcat og ipwss - hvis det er en fejl kan du jo lige bytte tilbage)

----------8<-------------------

#!/bin/ksh

LOGFILE=/var/tmp/test.log
# Stopping
date >> $LOGFILE
echo "Stopping ipworks for backup" >> $LOGFILE
/etc/init.d/ipworks.ss stop >> $LOGFILE 2>&1
sleep 5
ps -ef |grep -v grep | grep ipwss >> $LOGFILE 2>&1
/etc/init.d/ipworks.tomcat stop >> $LOGFILE 2>&1
ps -ef | grep -v grep | grep jakarta >> $LOGFILE 2>&1


#
# Lav din backup her
#

date >> $LOGFILE
echo "Starting ipworks" >> $LOGFILE 2>&1
/etc/init.d/ipworks.tomcat start >> $LOGFILE 2>&1
/etc/init.d/ipworks.ss start >> $LOGFILE 2>&1
ps -ef |grep -v grep | grep ipwss >> $LOGFILE 2>&1
/etc/init.d/ipworks.tomcat stop >> $LOGFILE 2>&1
ps -ef | grep -v grep | grep jakarta >> $LOGFILE 2>&1
date >> $LOGFILE
echo "Backup of ipworks complete" >> $LOGFILE

-------------8<------------------

Shell scriptet vil ikke fortsætte før den foregående kommando er returneret - derfor burde jeg ikke behøve nogen sleep hvis ellers ipworks.ss og ipworks.tomcat fungerer korrekt.

Jeg har ikke startet noget med nohup da det ikke er meningen med scripts i init.d
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