Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 2445 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 ..
Ähnliche Inhalte
DSL, VDSL
gelöst Zyxel IES5005G DSL-AM Line Card State Init (2)

Frage von Herbrich19 zum Thema DSL, VDSL ...

Administrator.de Feedback
gelöst Fragen werden nicht angezeigt? (8)

Frage von Lochkartenstanzer zum Thema Administrator.de Feedback ...

Windows Server
gelöst Frage zum Domänenumzug (8)

Frage von atomas42 zum Thema Windows Server ...

CPU, RAM, Mainboards
Hardware Fragen (12)

Frage von xaver-2 zum Thema CPU, RAM, Mainboards ...

Neue Wissensbeiträge
Viren und Trojaner

Ransomware or Wiper? RedBoot Encrypts Files but also Modifies Partition Table

(3)

Information von BassFishFox zum Thema Viren und Trojaner ...

Notebook & Zubehör

WOL bei HP Notebooks

(7)

Erfahrungsbericht von Henere zum Thema Notebook & Zubehör ...

LAN, WAN, Wireless

Neue Cisco Catalyst-Serie 9000

Information von Kuemmel zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Windows 10
gelöst Netzwerkkarte schaltet sich erst nach dem Logon ein (24)

Frage von DerWoWusste zum Thema Windows 10 ...

Windows Server
Seit IP Umstellung DC DNS Fehler (19)

Frage von Yaimael zum Thema Windows Server ...

Weiterbildung
gelöst Fest angestellter Admin oder Systemhaus Admin mit Kundenbetreuung? (15)

Frage von Voiper zum Thema Weiterbildung ...