Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage zu init

Frage Linux

Mitglied: cisab8888

cisab8888 (Level 1) - Jetzt verbinden

06.05.2012 um 17:28 Uhr, 2402 Aufrufe, 3 Kommentare

Also ich lese gerade ein Buch über LPI und hab dazu eine frage:

Der Autor stellt die Frage, warum ein und dasselbe Skript, durch zwei verschiedene Softlinks aktiviert wurde, einmal einen Deamon startet und dann wieder beendet:

K04apache2
S18apache2

Im Buch steht, dass das Skript durch Abfrage einer Variable ($0) feststellen kann ob es durch einen Dateinamen oder durch Aufruf eines Links gestartet wurde, und mit Verzweigungen innerhalb des Programms reagieren kann.

Meine Frage: Wie stellt das Skript fest, ob es eine Dateiname oder ein Link ist?

lg und danke!
Mitglied: broecker
06.05.2012 um 18:16 Uhr
Das tut es gar nicht so wie von Ihnen beschrieben, init (der Startdaemon) startet alle S-Skripte in z.B. Runlevel 5 der Reihe nach (S01...,...,S99...): /etc/rc5.d/S... und gibt ihnen als Parameter "start" mit, in den Skripten sehen Sie die betreffende case-Anweisung, mit der dann nur (z.B) der Start-Teil ausgeführt wird, beim Runterfahren entsprechend der K-Teil ("kill") mit Parameter "stop" - das ist alles, ob also ein Link in rc5.d und/oder init.d liegt oder das Skript selbst reinkopiert wurde ist völlig unerheblich.
HG
Mark
Bitte warten ..
Mitglied: hmarkus
06.05.2012 um 18:16 Uhr
Hallo,

die Variable $0 ist der Name des aufgerufenen Programms/Skripts. Beispiel:
#!/bin/bash 
echo $0
dieses Srikpt(chen) nenne ich fork.sh, mache es ausführbar (chmod 755 fork.sh) und mache folgendes
markus@samsung:~/Programmierung$ ./fork.sh  
./fork.sh 
markus@samsung:~/Programmierung$ ln -s fork.sh forklink.sh 
markus@samsung:~/Programmierung$ ./forklink.sh  
./forklink.sh 
markus@samsung:~/Programmierung$ 
Über die Variable $0 kann also festgestellt werden, wie der Aufruf erfolgt ist.
Außerdem solltest Du Dich mit dem Begriff "fork" vertraut machen Auf diese Weise werden Prozesse in Unix erzeugt. Lese die Manpage zu fork, außerdem hier http://de.wikipedia.org/wiki/Fork_(Unix) und hier http://www.linuxquestions.org/questions/programming-9/fork-variable-val ...
Bin mir allerdings nicht sicher, ob das Deine Frage beantwortet, dazu müsste ich mich selbst (mal wieder) in die Materie einarbeiten.

Markus
Bitte warten ..
Mitglied: mak-xxl
06.05.2012 um 19:10 Uhr
Moin cisab8888,

Vorbemerkung:
in einem Shell-Script ist die Variable '$0' immer mit dem Namen der ausgeführten (also rufenden) Datei belegt. Heißt also das Script 'test', so hat die Variable den Wert './test'.
Wird nun neben dem Script 'test' im gleichen Verzeichnis (i.e. 'ls -s test Test') ein Link '[@]Test' angelegt und ausgeführt, so hat die Variable den Wert './Test'. Liegt der Link in einem anderen Verzeichnis und heißt etwa auch 'test' (also so wie das Script), dann kommt es darauf an: Wird der Link mit vollem Pfad gerufen (i.e. '/home/test'), so ist dieser Pfad auch in '$0' zu finden. Wird der Link nur mittels Dateinamen gerufen, enthält '$0' wieder nur den Namen des Scriptes ('./test') - also kein Unterschied feststellbar. Abhilfe schafft dann entweder ein im Link gespeicherter Parameter, der von der Shell in die Variable '$1' gepackt wird - das Script kann den entsprechend verwerten. Aber das ist schon wieder eine andere Baustelle ... oder, ja endlich, eine

mögliche direkte Lösung (Feststellung, ob Link- oder Direktaufruf):

Wenn im Script die Ausgabe eines `ln -l $0` ausgewertet wird, sieht das so aus (unwichtiges weggelassen):

- per Link gerufen: '[diverse Ausgaben] ... /home/user/test -> /test'
- direkt gerufen: '[diverse Ausgaben] ... ./test'

Und beispielsweise anhand dieses Verweises (->) kann man entsprechend reagieren ...

[Edit]
Irgendwie hat dieser Post eine knappe Stunde bis zur Anzeige gebraucht, ich hatte ihn schon abgeschrieben ... Was sich jetzt mit den anderen Posts überschneidet - Entschuldigung, keine Absicht, als ich auf 'Senden' geklickt habe, war da noch nix ...

Und noch eine Anmerkung: Gerade wenn es um den Starten und Stoppen von Prozesse/Diensten geht (nicht nur des Indianers), ist es so, wie in der ersten Antwort beschrieben oder, ohne Dämonen: Der Status irgendeines Dienstes wird abgefragt und darauf reagiert, fertig.
Das Beispiel im Buch ist zwar eine Fingerübung für Shell-Anfänger, aber in dem Zusammenhang, nun ja, ..... hoffentlich nicht allzu irreführend.
[/Edit]


Euch allen einen schönen Sonntagabend, eine friedliche und erfolgreiche Woche, freundliche Grüße von der Insel - Mario
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst Server 2012R2 Frage zum DHCP Failover (6)

Frage von Coreknabe zum Thema Windows Server ...

LAN, WAN, Wireless
Frage zum Erzeugen eines portbasiertem VLAN (7)

Frage von presto-18 zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
gelöst HP Switches - Frage zu Spanning Tree bzw. Loop Back Protection (12)

Frage von chfran zum Thema LAN, WAN, Wireless ...

Hyper-V
Grundsatz Frage Anbindung Hyper V Hosts ans Netzwerk (7)

Frage von Eifeladmin zum Thema Hyper-V ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...