Wenn ich meine Entwicklungsumgebung starte, gibt es eine Vielzahl von Prozessen, die ich im Hintergrund ausführen muss. Es ist mühsam, sie alle einzeln zu starten, deshalb möchte ich ein Skript schreiben, das jedes einzelne startet. Ich kann das ganz gut, aber das Problem tritt auf, wenn ich sie neu starten muss (etwas, das ich regelmäßig tun muss).
Was ist der einfachste Weg, um den Prozess beim Starten und Speichern dieser Informationen zu erfassen, sodass beim erneuten Ausführen des Skripts überprüft wird, ob diese Informationen gespeichert wurden, und diese Prozesse dann geschlossen werden, bevor sie neu gestartet werden.
Ich möchte auch, dass das Skript so flexibel ist, dass es beim manuellen Herunterfahren des Prozesses a) keinen Fehler auslöst, wenn es den Prozess nicht findet, und b) nicht versehentlich einen anderen Prozess herunterfährt, der seitdem irgendetwas gemeinsam genutzt hat Identifizierungsinformationen, die ich gespeichert habe.
Aktualisieren
Insbesondere möchte ich im Moment zumindest Folgendes tun:
1) Geben Sie einen kurzen Befehl wie "start-dev" ein
2) Führen Sie Folgendes aus (Beachten Sie, dass der zweite und der dritte Befehl im Hintergrund ausgeführt werden sollen und ich & verwende, jedoch nicht den letzten Befehl, da ich die Ausgabe des Passagiers während der Ausführung sehen möchte):
- Wechseln Sie in mein Arbeitsverzeichnis
- Starten Sie Faye als Hintergrundprozess
- Starten Sie watchr als Hintergrundprozess
- Passagier starten
Bisher habe ich das
#!/bin/bash
cd ~/path/to/my/working-directory
rackup faye.ru -s thin -E production &
watch refresh.watchr &
passenger start
Dies funktioniert gut, aber das Problem tritt auf, wenn ich alle diese Prozesse neu starten muss. Ich muss zuerst alle ihre Prozess-IDs aufspüren und sie dann töten, bevor ich start-dev erneut ausführen kann. Deshalb möchte ich:
4) Geben Sie einen kurzen Befehl wie "restart-dev" ein, der die zuvor im Hintergrund ausgeführten Prozesse aufspürt und sie dann beendet, bevor Sie "start-dev" erneut ausführen. Es muss in der Lage sein, keinen Fehler auszulösen, wenn ich einen dieser Fehler manuell heruntergefahren habe und nicht versehentlich einen falschen Prozess heruntergefahren habe.
cd ~/path/to/my/working-directory
benutze ich normalerweisecd $(dirname $0)
. Es wirdcd
in das Arbeitsverzeichnis, in dem sich das Skript$0
befindet.