tag:forum.selfhtml.org,2005:/self Shell-Scripte schreiben – SELFHTML-Forum 2007-11-23T04:56:40Z https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183223?srt=yes#m1183223 Tom tom@bitworks.de http://selfhtml.bitworks.de 2007-11-22T17:43:53Z 2007-11-22T17:43:53Z Shell-Scripte schreiben <p>Hello,</p> <p>meine letze Frage unter dem Thema Server ist schon wieder drei Tage her, darum traue ich mich jetzt, endlich mal wieder eine zu stellen.<br> Also los, haut drauf! :-)</p> <p>Ich krampf mir hier einen Ab mit den diversen Anleitungen für Shell-Scripte, z.B. <a href="http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammierung" rel="nofollow noopener noreferrer">http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammierung</a></p> <p>Leider schnall ich nicht, wie ich z.B. kill mit der PID aus dem File füttern kann.</p> <p>Das ist jetzt nur ein Beipiel.</p> <p>#!/bin/sh</p> <p>case "$1" in</p> <p>start)<br>       mount -t reiserfs -o data=journal,notail /dev/hdb1 /hdd2<br>       /usr/bin/mysqld_safe --port=3307 --socket=/hdd2/var/run/mysqld/mysqld.sock --pid-file=/hdd2/var/run/mysqld/mysqld.pid --datadir=/hdd2/var/lib/mysql --log-error=/hdd2/var/log/mysql/mysql-bin.log > /dev/null 2>&1 &<br>       ;;</p> <p>stop)<br> #     stop mysqld no_2<br>       echo -n "stopping the 2nd mysql server"<br>       kill -$TERM < /hdd2/var/run/mysqld/mysqld.pid<br> #     umount hdd2<br>       echo -n "unmounting HDD2"<br>       umount /hdd2<br>       ;;</p> <p>restart)<br>       ;;</p> <p>status)<br>       ;;</p> <p>help)<br>       ;;</p> <p>*)<br>       ;;<br> esac</p> <p>Die konkreten Fragen die sich daraus ergeben:</p> <p>Muss das SIGTERM mit dem Dollarzeichen expandiert werden?<br> Wie bekomme ich die PID aus dem File an kill übergeben?</p> <p>Ich verstehe auch nicht, wieso ein</p> <p>echo < filepath    nicht funktioniert.</p> <p>Das Tutorial ist auch noch etwas dünn. Kennt Ihr bessere?</p> <p>Harzliche Grüße vom Berg<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a></p> <p>Tom</p> <div class="signature">-- <br> Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen<br> Nur selber lernen macht schlau<br> Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)<br> <img src="http://bitworks.de/~selfHTML/Virencheck.gif" alt="" loading="lazy"><br> </div> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183228?srt=yes#m1183228 Roger rehnelt@gmx.net 2007-11-22T19:08:06Z 2007-11-22T19:08:06Z Shell-Scripte schreiben <p>hallo!</p> <blockquote> <p>Wie bekomme ich die PID aus dem File an kill übergeben?</p> </blockquote> <p>Mit cat macht man das üblicherweise:<br> PID=<code>cat /hdd2/var/run/mysqld/mysqld.pid</code></p> <p>gruß.<br> roger.</p> <div class="signature">-- <br> meine freundin sagt, ich wäre neugierig.<br> so steht's zumindest in ihrem tagebuch. </div> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183225?srt=yes#m1183225 Vinzenz Mai vinzenzmai@web.de 2007-11-22T19:10:47Z 2007-11-22T19:10:47Z Shell-Scripte schreiben <p>Hallo Tom,</p> <p>statt Deiner provokanten Einleitung hättest Du Dir etwas mehr Mühe geben<br> können, Dein Problem ordentlich zu erläutern.</p> <blockquote> <p>Leider schnall ich nicht, wie ich z.B. kill mit der PID aus dem File füttern kann.</p> </blockquote> <blockquote> <p>Das ist jetzt nur ein Beipiel.</p> </blockquote> <p>was folgt ist ein Beispiel für miserablen Code, den Anfänger hier im Forum<br> gerne präsentieren: Kein einziger Kommentar erläutert, was passieren soll.<br> Erwartest Du im Ernst, dass jeder Deine Threads gelesen hat - und daher<br> weiß, was Du vorhast.</p> <blockquote> <p>mount -t reiserfs -o data=journal,notail /dev/hdb1 /hdd2</p> </blockquote> <p>Du willst also eine Partition mounten - in einem Startskript für einen<br> MySQL-Dämon. Das halte ich persönlich zwar nicht für eine gute Idee, aber<br> ich habe eine Ahnung, warum Du das machst. Kommentierungswürdig!</p> <p>Warum überprüfst Du nicht den Erfolg Deiner Aktion?</p> <blockquote> <p>kill -$TERM < /hdd2/var/run/mysqld/mysqld.pid</p> </blockquote> <p>und hier würdest Du gern die PID aus der Datei verwenden.</p> <blockquote> <p>Ich verstehe auch nicht, wieso ein<br> echo < filepath    nicht funktioniert.</p> </blockquote> <p>"Funktioniert nicht" ist keine Fehlerbeschreibung.<br> Was erwartest Du? Was bekommst Du?</p> <p>Warum testest Du die einzelnen Schritte nicht mit einfachen Zweizeilern durch?</p> <p>info bash ist übrigens sehr informativ. Allerdings werden - wie ich neulich erwähnt habe - bei Debian aus Lizenzgründen die Infoseiten der bash nicht<br> installiert, Du musst Dir diese anderswoher besorgen.</p> <p>Die besten Tutorials zum Schreiben von Startskripten sind übrigens die Startskripte andere Demons.</p> <p>Grüße</p> <p>Vinzenz</p> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183224?srt=yes#m1183224 Tom tom@bitworks.de http://selfhtml.bitworks.de 2007-11-23T04:56:40Z 2007-11-23T04:56:40Z Tutorial zu UNIX und Shellscripten, usw. <p>Hello,</p> <p>auf der Suche nach verständlichen Tutorials bin ich auch auf<br> <a href="http://www.netzmafia.de/skripten/unix/unix8.html" rel="nofollow noopener noreferrer">http://www.netzmafia.de/skripten/unix/unix8.html</a></p> <p>Das mag ich auch weiterempfehlen</p> <p>Es gehört zur Vorlesung <a href="http://www.netzmafia.de/skripten/unix/" rel="nofollow noopener noreferrer">http://www.netzmafia.de/skripten/unix/</a><br> und ich vermute, dass das Gesamtwerk zu UNIX für den "Normal-Programmierer" keine Fragen offen lässt. Aber das kann ich bestimmt erst in einen Monat sagen :-)<br> (es ist so dick)</p> <p>Harzliche Grüße vom Berg<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a></p> <p>Tom</p> <div class="signature">-- <br> Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen<br> Nur selber lernen macht schlau<br> Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)<br> <img src="http://bitworks.de/~selfHTML/Virencheck.gif" alt="" loading="lazy"><br> </div> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183226?srt=yes#m1183226 Tom tom@bitworks.de http://selfhtml.bitworks.de 2007-11-22T19:26:17Z 2007-11-22T19:26:17Z Kommentar zu Kommentaren <p>Hello,</p> <blockquote> <p>Kein einziger Kommentar erläutert, was passieren soll.</p> </blockquote> <p>Stimmt nicht!<br> Außerdem geht es nur um den kurzen Abschnitt, der kommentiert ist.</p> <p>stop)<br> #     stop mysqld no_2<br>       echo -n "stopping the 2nd mysql server"<br>       kill -$TERM < /hdd2/var/run/mysqld/mysqld.pid<br> #     umount hdd2<br>       echo -n "unmounting HDD2"<br>       umount /hdd2<br>       ;;</p> <p>Vielen Dank für die anderen Hinweise. Hatte ich aber schon berücksichtigt.<br> Abfrage von Rückgabewerten und andere Optionen habe ich hir für das Posting alle herausgenommen, um mich auf das Wesentliche zu beschränken. Andere Scripte habe ich hier haufenweise liegen, leider sind sie nicht gut dokumentiert und auch nicht unbedingt kurz :-(</p> <p>Den Start-teil habe ich dringelassen, damit klar wird, dass das Laufwerk gemountet wurde und der Server gestartet. Nicht das irgendein Anfänger dann kommt und sagt "ist denn das Laufwerk überhaupt gemountet und läuft denn der Server überhaupt?"</p> <p>Antworte auf beide Fragen lautet JA.</p> <p>was könnte an  "echo < filepath"     nicht funktionieren?</p> <p>Da ich nichts weiter dazugeschrieben habe, steht zur vermuten, dass einfach nichts weiter passiert. Wenn eine Fehlermeldung gekommen wäre, hätte ich sie mitgepostet, oder, was eher warscheinlich ist, gar nicht erst gepostet, sondern diese zur weiteren Suche benutzt.</p> <p>Bitte nochmal zurückspulen und von vorne anfangen.</p> <p>Harzliche Grüße vom Berg<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a></p> <p>Tom</p> <div class="signature">-- <br> Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen<br> Nur selber lernen macht schlau<br> Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)<br> <img src="http://bitworks.de/~selfHTML/Virencheck.gif" alt="" loading="lazy"><br> </div> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183227?srt=yes#m1183227 Vinzenz Mai vinzenzmai@web.de 2007-11-22T19:50:18Z 2007-11-22T19:50:18Z Kommentare und Problembeschreibungen <p>Hallo Tom,</p> <blockquote> <p>Außerdem geht es nur um den kurzen Abschnitt, der kommentiert ist.</p> <p>stop)<br> #     stop mysqld no_2</p> </blockquote> <p>sorry, für mich ist _sowas_ kein Kommentar.<br> Genau solche Kommentare sollte man möglichst vermeiden!<br> Sie sind weder für einen Anfänger noch für einen Fortgeschrittenen hilfreich.</p> <blockquote> <p>echo -n "stopping the 2nd mysql server"<br>       kill -$TERM < /hdd2/var/run/mysqld/mysqld.pid</p> </blockquote> <p>und sowas sind erst recht ein überflüssiger und aussageloser Kommentar.<br> Du kannst das doch besser. Warum mutest Du uns hier sowas zu? Nein, es ist<br> ganz und gar keine gute Idee, vernünftige Kommentare aus seinem geposteten<br> Quelltext zu entfernen.</p> <blockquote> <p>#     umount hdd2</p> </blockquote> <h3>Hänge das Dateisystem der zweiten Festplatte mit den wichtigen Daten aus.</h3><h3>Nicht, dass diese versehentlich ins Nirwana befördert werden, bevor sie</h3><h3>ins neue System übertragen wurden.</h3><h3>(Ein Backup auf externe Medien wäre sehr anzuraten :-))</h3><blockquote> <p>echo -n "unmounting HDD2"<br>       umount /hdd2</p> </blockquote> <blockquote> <p>Den Start-teil habe ich dringelassen, damit klar wird, dass das Laufwerk gemountet wurde und der Server gestartet. Nicht das irgendein Anfänger dann kommt und sagt "ist denn das Laufwerk überhaupt gemountet und läuft denn der Server überhaupt?"</p> </blockquote> <p>Wie bitte. Du erwartest also von Anfängern Hilfe, möchtest von diesen aber<br> nicht mit solchen Frgagen genervt werden - und irritierst Fortgeschrittene.<br> Solche Aspekte kann man doch wunderbar im Postingtext erwähnen.</p> <blockquote> <p>Antworte auf beide Fragen lautet JA.</p> <p>was könnte an  "echo < filepath"     nicht funktionieren?</p> </blockquote> <p>vieles: Was ist</p> <p>filepath</p> <p>Eine Variable? Eine Zeichenkette, die einen Dateipfad enthält?<br> Bei mir liefert es übrigens die Fehlermeldung</p> <p>bash: filepath: Datei oder Verzeichnis nicht gefunden.</p> <blockquote> <p>Bitte nochmal zurückspulen und von vorne anfangen.</p> </blockquote> <p>was, bitte, erwartest Du? (Ich gehe jetzt davon aus, dass statt filepath ein<br> Pfad zu einer Datei steht.)</p> <p>man echo</p> <p>echo [OPTION]... [ZEICHENKETTE]...</p> <p>Gib ZEICHENKETTE(n) auf Standardausgabe aus.<br> Was soll nun Deine Anweisung bewirken?</p> <p>Grundsätzlich ist Dein Problem doch eher das: wie lese ich den Inhalt einer<br> Datei in eine Variable ein - siehe dazu <a href="https://forum.selfhtml.org/?t=162361&m=1056566" rel="noopener noreferrer">Rogers Beitrag</a>.</p> <p>Freundliche Grüße</p> <p>Vinzenz</p> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183229?srt=yes#m1183229 Tom tom@bitworks.de http://selfhtml.bitworks.de 2007-11-22T20:31:44Z 2007-11-22T20:31:44Z Shell-Scripte schreiben <p>Hello,</p> <blockquote> <blockquote> <p>Wie bekomme ich die PID aus dem File an kill übergeben?</p> </blockquote> <p>Mit cat macht man das üblicherweise:<br> PID=<code>cat /hdd2/var/run/mysqld/mysqld.pid</code></p> </blockquote> <p>Mit cat hatte ich es schon probiert, aber ohne die Backticks.</p> <p>neuer Versuch also:</p> <p>testserver:~# chmod o+r /hdd2/var/run/mysqld/mysqld.pid<br> testserver:~# PID=<code>cat /hdd2/var/run/mysqld/mysqld.pid</code><br> testserver:~# echo $PID<br> 2531</p> <p>Das sieht doch schon mal gut aus.</p> <p>Ein paar Fehlversuche waren natürlich auch dabei...<br> Leerzeichen _hinter_ dem = scheint also auch nicht erlaubt zu sein.<br> Dass es zwischen Variable und = verboten ist, steht ja in der Anleitung.<br> Dann würde PID als Befehl gewertet wrden.</p> <p>Ok, nur umount will noch nicht.</p> <p>testserver:~# ./extra stop<br> stopping the 2nd mysql server under PID=25950<br> unmounting HDD2umount: /hdd2: device is busy<br> umount: /hdd2: device is busy<br> testserver:~#</p> <p>unmounting HDD2umount: /hdd2: device is busy<br>                ^</p> <p>Da wollte ich gerne einen Zeilenumbruch...<br> Aber "\n" geht nicht?</p> <p>Ich brauch ein anständiges Buch zum Shellscripting.<br> Hab auch alles vergessen in den 25 Jahren.</p> <p>Harzliche Grüße vom Berg<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a></p> <p>Tom</p> <div class="signature">-- <br> Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen<br> Nur selber lernen macht schlau<br> Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)<br> <img src="http://bitworks.de/~selfHTML/Virencheck.gif" alt="" loading="lazy"><br> </div> https://forum.selfhtml.org/self/2007/nov/22/shell-scripte-schreiben/1183230?srt=yes#m1183230 Vinzenz Mai vinzenzmai@web.de 2007-11-22T20:44:31Z 2007-11-22T20:44:31Z Shell-Scripte schreiben <p>Hallo Tom,</p> <blockquote> <p>unmounting HDD2umount: /hdd2: device is busy<br> Da wollte ich gerne einen Zeilenumbruch...</p> </blockquote> <p>Warum verwendest Du dann die Option -n, die den Zeilenvorschub am Ende der<br> Zeile verhindert?</p> <blockquote> <blockquote> <p>echo -n "unmounting HDD2"</p> </blockquote> </blockquote> <p>man echo</p> <p>hilft Dir weiter.</p> <p>Freundliche Grüße</p> <p>Vinzenz</p>