Holger: Parameter bei einem Remshell uebergeben

Hallo,
ich fuehre ein rmsh auf die Datei holger.pl aus.
Diese Datei sourct nur ein bestimmtes Profil ein, um DB-Connection-informationen zu bekommen. danach soll auf ein anderes Skript verwiesen werden, das dann die eigentliche DB-connection uebernimmt.

also:
(einbinden des Profils:) . /opt/(...)/group.profile
(redirect:)   /opt/(...)/bp_data_status_app.pl

Mein Problem ist nur, dass der "redirect-skript" dynamisch bestimmt werden muss, da holger.pl von mehreren Dateien aufgerufen wird, die alle ein anderes remsh machen, aber die gleiche DB-Connection benoetigen.
Wie kann ich im remsh -Command Parameter uebergeben?
So koennte man doch den Parameter fuer das redirect-skript an holger.pl uebergeben.
Ich hoffe, das war verstaendlich ausgedrueckt.
Danke im voraus,
Holger

  1. Wie fuehre ich dieses Unix-Commando aus:
    /opt/script.pl

    wenn ich dazu noch parameter an das Skript uebergeben moechte?
    in HTML sieht das ja so aus: script.pl?var=irgendwas
    aber in einem unix-Commando?

    Gruss,
    Holger

    1. Wie kann ich in einem Skript das Profil
      /opt/(...)/lib/buypower_group.profile
      einbinden?

      1. Halihallo Holger

        Wie kann ich in einem Skript das Profil
        /opt/(...)/lib/buypower_group.profile
        einbinden?

        Gegenfragen:
        a) Wie ist die Datei syntaktisch aufgebaut (Struktur, Inhaltstyp)
        b) Wie willst du die Daten vorliegen haben? - Wie willst du auf die Daten darin
           zugreifen?

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Mal ein paar Details zur Struktur:

          es gibt auf dem Server a ein skript, das header, inhalt und footer darstellt.
          Der inhalt besteht aus einem Skript auf dem Server b, das mittels remsh aufgerufen wird. in diesem Skript wird eine db-Connection aufgebaut.
          leider sind die db-infos (dbname, username, und pw) nur auf server b in einem package und dort als $ENV eingebunden.
          Diese env definieren sich im Profil fuer den benutzer, der im remsh angegeben wird.

          Rufe ich nur das Inhaltsskript auf server b auf, klappt die db-abfrage.
          rufe ich das komplette Skript auf server a (und somit das inhaltsskript ueber remsh auf), werden diese db-variablen nicht erkannt.
          ich dachte mir, das liegt am remsh-befehl, da ueber ihn keine profile-dateien bekannt sind.

          1. Halihallo Holger

            es gibt auf dem Server a ein skript, das header, inhalt und footer darstellt.
            Der inhalt besteht aus einem Skript auf dem Server b, das mittels remsh aufgerufen wird. in diesem Skript wird eine db-Connection aufgebaut.
            leider sind die db-infos (dbname, username, und pw) nur auf server b in einem package und dort als $ENV eingebunden.
            Diese env definieren sich im Profil fuer den benutzer, der im remsh angegeben wird.

            Um Himmels willen, aber was machst du da? - Das hört sich nach Katastrophe an. Du greifst
            bei jedem Request auf einen fremden Server über remsh zu? - Gibt es da keine andere
            Möglichkeit?

            rufe ich das komplette Skript auf server a (und somit das inhaltsskript ueber remsh auf), werden diese db-variablen nicht erkannt.

            Natürlich, diese musst du ja dem remote-Prozess mitteilen. Bei remsh geht das, wie ich
            gelesen habe, über STDIN (pipe zu remsh); die Ausgabe des remote-prozess kommt über
            STDOUT rein. Die Kommunikation zwischen diesen beiden Prozessen läuft also über die
            Dateihandler (mit remsh als "Kommunikationsinterface"), nicht über Parameter. Wäre es
            ggf. eine Möglichkeit über LWP::Simple die Daten zu holen? - Oder über ein Socket?

            ich dachte mir, das liegt am remsh-befehl, da ueber ihn keine profile-dateien bekannt sind.

            Keine Ahnung, ich habe mit remsh noch nie gearbeitet :-)
            Dein Vorhaben scheint mir jedoch höchst katastrophal. Ich schlage vor, dass du nochmals
            ganz genau darüber nachdenkst, wie man es anders lösen kann (ggf. ziehe in Betracht ganz
            von einem zweiten Rechner abzusehen).

            Viele Grüsse

            Philipp

            --
            RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
            Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
            1. Das problem ist, dass ich diese architektur uebernehmen muss. Da sie schon so vorliegt

              1. der remsh-befehl greift auf holger.pl zu, das sich ebenfalls auf serever b befindet.
                In holger.pl steht nur folgendes:

                ./opt/(...)/group.profile
                /opt/(...)/dbconnectionscript.pl

                anstelle dass ich den remsh wie vorher auf das dbconnectionscript.pl ausfuehre, habe ich hier eine Zwischenstufe, die nur das gewuenschte profil einbindet und danach weiterleitet.
                Klappt soweit ganz gut.
                Da ich aber nun mehrmals von anderen Skripten den remsh-befehl ausfuehren muss, und dieser auch verschiedene redirect-scripte haben muss, ist diese loesung nicht die endgueltig richtige, da sie nur statisch weiterleitet.
                Wie kann ich nun den redirect-pfad dynamisch vom aufrufer des remsh uebergeben?
                ueber sockets? oder ueber den stdin? Damit kenne ich mich nicht so gut aus, da muss wohl die doku zu rate gezogen werden.

                1. Hallo,

                  Wie kann ich nun den redirect-pfad dynamisch vom aufrufer des remsh uebergeben? [...] da muss wohl die doku zu rate gezogen werden.

                  Das mit der Doku ist immer ein guter Ansatz. Es hat sich in der Vergangenheit bewährt, daß das vor einem Posting erfolgt;-)

                  Wenn sich remsh so verhält wie sich die meisten gleich gelagerten Tools verhalten[1], kannst Du dem scrip noch Parameter mit übergeben, genau so wie Du es bei einem lokalen Aufruf machen kannst.
                  Im Perlscript kannst Du die Parameter dann über @ARGV auslesen.

                  Grüße
                    Klaus

                  [1] der Blick in die Doku sollte Gewißheit bringen *g*

                2. Halihallo Holger

                  Da ich aber nun mehrmals von anderen Skripten den remsh-befehl ausfuehren muss, und dieser auch verschiedene redirect-scripte haben muss, ist diese loesung nicht die endgueltig richtige, da sie nur statisch weiterleitet.

                  Was meinst du mit "Weiterleitung"? - Weiterleitung ist mir in diesem Kontext unbekannt.

                  Wie kann ich nun den redirect-pfad dynamisch vom aufrufer des remsh uebergeben?

                  Eben: Über remsh kann man mit dem Remote-Prozess über die Filehandles STDIN/STDOUT
                  kommunizieren.

                  Informiere dich diesbezüglich unter:

                  perldoc perlipc
                  perldoc IPC::Open2
                  perldoc IPC::Open3

                  perldoc -f open   # in Verbindung mit Pipes

                  ueber sockets? oder ueber den stdin? Damit kenne ich mich nicht so gut aus, da muss wohl die doku zu rate gezogen werden.

                  Ja. Wenn du remsh verwendest, brauchst du keine Sockets mehr, denn diese funktionieren
                  einfach ausgedrückt gleich (du würdest das Problem nur noch komplexer machen, als es
                  eh schon ist, was ich bereits bemängelt habe).

                  Viele Grüsse

                  Philipp

                  --
                  RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
                  Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    2. Halihallo Holger

      Wie fuehre ich dieses Unix-Commando aus:
      /opt/script.pl

      z.B. über:
      system('/opt/script.pl')

      wenn ich dazu noch parameter an das Skript uebergeben moechte?

      system('/opt/script.pl','paramtername1=parameterwert1','paramname2=paramval2');

      aber in einem unix-Commando?

      s. oben.
      Zugriff über @ARGV

      Und warum lädst du die Konfiguration nicht in dem Script, wo sie gebraucht wird? - Und
      wie willst du eine DB-Connection übergeben?

      Dir sind Module bekannt?

      BTW: Was ist eine ramshell?

      Viele Grüsse

      Philipp

      --
      RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
      Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.