Niet meer inloggen met Redhat 7.3 na script

Pagina: 1
Acties:

  • Dr. Boktor
  • Registratie: Januari 2001
  • Laatst online: 21-07 01:34
Ik heb gisteren mijn eerste scriptje geschreven (ik ben nogal een newbie met linux), maar nu start mijn RH niet meer normaal op. Het scriptje ziet er zo uit:

========================

#!/bin/sh
#
# Share controle script
# Dit script controleert of een bepaalde computer
# aan staat, zodat zijn shares gebruikt kunnen worden

# Constanten
NAME=(Een IP-adres)

ping -c 1 $NAME
if [ $? = 0 ];
then
mount -t smbfs -r -o username=guest% //$NAME/Films /shares/movies
mount -t smbfs -r -o username=guest% //$NAME/Incoming /shares/incoming
mount -t smbfs -r -o username=guest% //$NAME/Muziek /shares/mp3
else
echo "$NAMEUnreachable: Shares not working!"
fi

========================

Ik heb een verwijzing in de rc.local gezet, zodat hij nadat samba wordt opgestart, wordt gestart. Ik heb nu 2 problemen:

Probleem 1
Als ik RedHat boot, blijft hij "hangen" wanneer mijn andere computer niet aanstaat. Ik kom dan dus nooit bij het inloggedeelte van linux. Overigens kan ik dan wel vanaf mijn andere computer inloggen via Secure Shell. Wanneer mijn andere computer gewoon aan staat, boot linux wel gewoon. Hoe los ik dit probleem op, dat wanneer er geen verbinding is, hij toch gewoon doorstart en ik normaal kan inloggen op de server.

Probleem 2
Met DOS herinner ik me iets vaags van echo off, zodat je zag niet wat er allemaal aan commando's werden uitgevoerd. (nu laat hij namelijk zien wat er gepinged wordt, hoe het resultaat is en hoe het mounten verloopt, dat hoef ik allemaal niet te zien) Kan dit ook met linux, en zo ja, hoe?

  • Fatal-Error
  • Registratie: Juli 2001
  • Niet online
Probleem 1:
Probeer eens de optie '-w' van ping...
Probleem 2:
Je kunt uitvoer omleiden mbv het '>' teken, bv naar /dev/null ('ping ... > /dev/null')

Welcome to the desert of the real.


  • Dr. Boktor
  • Registratie: Januari 2001
  • Laatst online: 21-07 01:34
Ik ben net weer een tijdje aan het prutsen geweest en zag helaas de eerste tip te laat, wat me veel tijd had kunnen besparen. Het resultaat is nu het volgende:

========================

#!/bin/sh
#
# Share controle script
# Dit script controleert of een bepaalde computer
# aan staat, zodat zijn shares gebruikt kunnen worden

# Constanten
NAME=192.168.200.1

if [ $(mount|grep shares|wc -l) = 0 ]; then
PING_RESULT=$(ping -c 1 -w 1 $NAME|grep icmp_seq)
if [ "$PING_RESULT" != "" ]; then
mount -t smbfs -r -o username=guest% //$NAME/Films /shares/movies
mount -t smbfs -r -o username=guest% //$NAME/Incoming /shares/incoming
mount -t smbfs -r -o username=guest% //$NAME/Muziek /shares/mp3
fi
fi

========================

Wat betreft die tweede tip; is het niet mogelijk om de hele uitvoer om te leiden? Dus dat ik bijvoorbeeld ook geen berichten meer krijg hoe de shares gemount worden.

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
1. Stel dat er maar 1 share is gemount (om welke reden dan ook). 'wc -l' is dan ongelijk nul, dus worden de andere twee shares niet gemount.

2. In plaats van de output terug te sturen naar een variabele, kun je beter gebruik maken van de errorcode ($?) die ping teruggeeft:

3. Waarom check je niet gewoon of een host up is en dan alle shares mounten? Het commando mount checkt ook zelf of er al is gemount, dus dat hoef je niet nog eens te doen! De output van mount op STDERR/STDOUT kun je dan weggooien.

Je scriptje is dan heel eenvoudig:

code:
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

NAME=197.168.200.1

ping -c1 -w1 $NAME >& /dev/null
if [ $? = 0 ]
then
  mount -t smbfs -r -o username=guest% //$NAME/Films /shares/movies >& /dev/null
  mount -t smbfs -r -o username=guest% //$NAME/Incoming /shares/incoming >& /dev/null
  mount -t smbfs -r -o username=guest% //$NAME/Muziek /shares/mp3 >&/dev/null
fi

  • imdos
  • Registratie: Maart 2000
  • Laatst online: 05-08 12:09

imdos

I use FreeNAS and Ubuntu

>& /dev/null
Dit klopt niet helemaal afaik.

Dat wordt of
code:
1
2
>/dev/null 
>/dev/null 2>&1

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem


  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Hmm,

1. "> /dev/null" redirects alleen de stdout naar /dev/null (ping schrijft ook op stderr)

2. "> /dev/null 2>&1" is niet meer dan een uitgebreide manier om te zeggen dat filehandle 1 naar /dev/null wordt gestuurd en filehandle 2 gecombineerd wordt met filehandle 1. Als je dit in *csh probeert te doen, gaat er ongetwijfeld iets fout. (ambiguous redirect). Om compatible te zijn gebruik ik daarom >&, terwijl &> natuurlijk ook werkt. (zie ook man bash, man tcsh over wat de voorkeur is voor redirection)

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Je kunt ook ipv 'ping' 'fping' gebruiken, een ping die gemaakt is om in scripts te gebruiken.

  • Dr. Boktor
  • Registratie: Januari 2001
  • Laatst online: 21-07 01:34
Dat het mogelijk is dat er maar 1 share up is, is juist de bedoeling, want zo kan ik bijvoorbeeld stoppen met films sharen wanneer ik aan mijn limiet raak, terwijl ik de rest vrolijk door kan blijven sharen.
De ping-check voor het mounten heb ik ook expres gedaan, omdat het veel langer duurt voor linux door heeft dat de mount niet mogelijk is, dan die ene seconde die het duurt om door te hebben dat de ping niet werkt.
Ik zal die redirects gebruiken, maar ik blijf het toch nog steeds raar vinden dat je dat dan acher elk commando moet zetten, maar er zal vast een goede reden voor zijn :-)
Ik heb fping gezocht, maar ik heb hem niet gevonden. Moet je dat apart installeren?

  • richardt
  • Registratie: Mei 2002
  • Laatst online: 08-03-2025
Je kunt natuurlijk ook de output van het script zelf redirecten naar /dev/null, dan hoef je dat niet in het script zelf te doen.

fping is inderdaad iets geavanceerder dan ping. Wat handig is bij fping is dat je bijvoorbeeld de timeout in kunt stellen. Je moet hem wel extra installeren.

  • Dr. Boktor
  • Registratie: Januari 2001
  • Laatst online: 21-07 01:34
Bedankt, nu werkt alles volledig naar wens. Stom van me dat ik niet aan het omleiden van het script zelf heb gedacht. Maar het is niet de eerste keer met linux dat ik iets voor de hand liggends niet meteen zie :-)
Pagina: 1