it-swarm.com.de

Wie kann ich überprüfen, ob PostgreSQL über ein Linux-Skript installiert ist oder nicht?

Ich möchte ein Skript einchecken, ob PostgreSQL installiert ist oder nicht unter Linux, und das Ergebnis ausdrucken. Vorschläge für die Überprüfung? 

39

Wie wäre es mit dem Befehl which?

Wenn Sie which psql ausführen und Postgres nicht installiert ist, scheint keine Ausgabe zu erfolgen. Sie müssen nur die Terminal-Eingabeaufforderung bereitstellen, um einen anderen Befehl anzunehmen:

> which psql
>

Wenn Postgres installiert ist, erhalten Sie eine Antwort mit dem Pfad zum Speicherort der Postgres-Installation:

> which psql
/opt/boxen/homebrew/bin/psql

Wenn Sie sich man which anschauen, scheint es auch eine Option zu geben, die Ihnen helfen könnte:

-s      No output, just return 0 if any of the executables are found, or
        1 if none are found.

Es scheint also so, als könnte jede Skriptsprache, die Sie verwenden, einen Terminalbefehl ausführen, den Sie which -s psql senden könnten, und den Rückgabewert verwenden, um festzustellen, ob Postgres installiert ist. Von dort aus können Sie dieses Ergebnis beliebig ausdrucken.

Ich habe Postgres auf meinem Rechner installiert, so dass ich Folgendes ausführen kann

> which -s psql
> echo $?
0

dies sagt mir, dass der Befehl 0 zurückgegeben hat, was darauf hinweist, dass die ausführbare Postgres-Datei auf meinem Computer gefunden wurde.

Hier sind die Informationen zur Verwendung von echo $?

57
campo

Wenn es auf Debian basiert.

aptitude show postgresql | grep State

Aber ich denke, Sie können einfach versuchen, es mit einem Flag wie --version zu starten, das lediglich einige Informationen ausgibt und beendet.

Aktualisiert mit "Service Postgres Status". Versuchen:

service postgres status
if [ "$?" -gt "0" ]; then
  echo "Not installed".
else
  echo "Intalled"
fi
7
Draco Ater

Es gibt keinen einfachen Weg, dies zu tun. Alles, was Sie tun können, ist mit dem Paket-Manager (rpm, dpkg) zu überprüfen oder einige mögliche Speicherorte für die gewünschten Dateien zu prüfen. Oder Sie könnten versuchen, eine Verbindung zu einem wahrscheinlichen Port (5432) herzustellen und zu sehen, ob Sie eine PostgreSQL-Protokollantwort erhalten. Aber nichts davon wird sehr robust sein. Möglicherweise möchten Sie Ihre Anforderungen überprüfen.

5

Wenn Sie Debian Linux (oder ein Derivat) ausführen und eine positive Rückgabe mit > which psql haben, geben Sie einfach psql -V (Großbuchstabe "V") ein und Sie erhalten eine Rückgabe wie folgt: psql (PostgreSQL) 9.4.8

4
Roland Shield

Es gibt keine einfache Methode, da PostgreSQL auf viele verschiedene Arten installiert und eingerichtet werden kann:

  • Wird von der Quelle in einem Benutzerverzeichnis installiert
  • Installiert von der Quelle in /opt oder /usr/local, manuell gestartet oder durch ein Init-Skript gestartet
  • Installiert von Distributorenpaketen rpm/deb und wird über ein Init-Skript gestartet
  • Installiert von rpm/deb-Paketen von Drittanbietern und wird über ein Init-Skript gestartet
  • Installiert aus Paketen, aber not Startet
  • Client installiert, Verbindung zu einem Server auf einem anderen Computer hergestellt
  • Installiert und ausgeführt, jedoch nicht auf dem Standardport PATH oder dem Standardport

Sie können sich nicht darauf verlassen, dass psql auf der PATH steht. Sie können sich nicht darauf verlassen, dass es auf dem System nur eine psql gibt (mehrere Versionen können auf verschiedene Arten installiert werden). Sie können dies nicht auf Port-Basis durchführen, da es keine Garantie gibt, dass es sich um Port 5432 handelt, oder dass es nicht mehrere Versionen gibt.

Fordern Sie den Benutzer auf und fragen Sie ihn.

4
Craig Ringer

Und wenn bei dieser großen Auswahl an Antworten alles andere fehlschlägt, können Sie "find" wie folgt verwenden. Oder Sie müssen Sudo verwenden 

Wenn Sie root sind, geben Sie einfach $$> find / -name 'postgres' ein.

Wenn Sie ein Benutzer sind, benötigen Sie Sudo-Berechtigungen, um alle Verzeichnisse auszuführen 

Ich führe es auf diese Weise von der /-Basis aus, um den gesamten Pfad zu finden, in dem sich das Element befindet. Dadurch werden alle Dateien oder Verzeichnisse mit den "postgres" darin zurückgegeben.

Sie könnten dasselbe tun, wenn Sie nach den pg_hba.conf- oder postgresql.conf-Dateien suchen.

3
netfluence

Gehen Sie in das bin-Verzeichnis von postgres db wie /opt/postgresql/bin und führen Sie den folgenden Befehl aus: 

[...bin]# ./psql --version

psql (PostgreSQL) 9.0.4

Bitte schön . .

2
Finn

aptitude show postgresql | grep Version arbeitete für mich

1
user2584621

Ich habe jahrelang den Befehl verwendet: 

ps aux | grep postgres

Einerseits ist es nützlich (für jeden Prozess) und gibt nützliche Informationen (aber vom Prozess-POV). Andererseits wird überprüft, ob der bereits installierte Server ausgeführt wird.

Irgendwann habe ich dieses Tutorial gefunden, wo die Verwendung des locate -Befehls angezeigt wird. Anscheinend ist dieser Befehl für diesen Fall viel sinnvoller.

0
johnniepop

Sie können auch /opt mount in folgendem Pfad einchecken /opt/PostgresPlus/9.5AS/bin/

0
vinoy vincent