2012-03-31 11 views
1

Ich versuche ein Bash-Skript auszuführen, wenn meine EC2-Instanzen gestartet werden. Ich möchte GlassFish nur starten, wenn der Server startet. Der Befehl, den ich ausführen möchte, ist:Shell-Skript beim Start der Instanz ausführen

Was funktioniert, wenn ich es manuell eingeben.

Ich habe versucht, das Hinzufügen dieser Befehl in ein paar Orte ohne Glück:

  • am Ende /etc/rc.local
  • am Ende /etc/rc.d/rc. lokale
  • erstellt mein eigenes Skript in /etc/init.d/

ich jedes Skript 777 Berechtigungen erteilt haben.

Wer hat irgendwelche Ideen, was ich falsch mache?

+2

haben Sie überprüfen Ihre Protokolle in Benutzers festgelegt werden? nichts Interessantes? –

+1

(Wenn Sie Debian oder Ubuntu verwenden, ist es am besten, dass Sie den Befehl 'update-rc.d' verwenden, um Skripte in */etc/init.d * zu installieren, anstatt es manuell zu tun.) – thb

+0

@jcomeau_ictx Wo würden die Informationen gespeichert? –

Antwort

4

Sofern nicht ungewöhnlich konfiguriert, möchte sudo Authentifizierung, wenn ausgeführt. Es ist normalerweise dazu gedacht, interaktiv ausgeführt zu werden.

Unter der Annahme, dass das Skript /glassfish3/bin/asadmin von root gehört, Sie die Dateiberechtigungen für 6755. festlegen Dies tut, was Sie wahrscheinlich sudo bedeutete zu tun. Natürlich kann es auch gefährlich sein und ein Sicherheitsrisiko darstellen.

(@jcomeau_ictx stimmt übrigens sollten Sie Protokolle überprüfen, da schlägt er vor..)

-Update zugunsten von Archivalien: Die obige Antwort Glücklicherweise ist die OP unmittelbare Problem gelöst zu haben scheint, so wir Ich werde es dabei belassen. Da diese Antwort jedoch archiviert bleibt und andere später nachsehen, sollte ich mehr hinzufügen.

Ein kann ändern Sie die Dateiberechtigungen von jeder ausführbaren Datei 6757, aber das ist nicht immer eine gute Praxis. Die Wirkung solcher Berechtigungen besteht darin, (a) jedem die ausführbare Datei mit (b) den vollen Rechten des Eigentümers der ausführbaren Datei ausführen zu lassen. Manchmal ist dies genau das, was Sie wollen, aber sehen Sie: Im OP-Fall kann /glassfish3/bin/asadmin mit solchen Berechtigungen jetzt von jedem mit beliebigen Argumenten mit vollen Root-Rechten aufgerufen werden. Wenn das nicht das ist, was Sie wollen, müssen Sie etwas mehr Sorgfalt walten lassen.

Es gibt mehrere Möglichkeiten zur zusätzlichen Pflege. Eins ist wie folgt.

  1. Lassen Sie die ausführbare Datei mit 755.
  2. Schreibberechtigungen und einen kleinen Wrapper kompilieren, ein Programm, das execv() von unistd.h verwendet die ausführbare Datei zu starten.
  3. Wenn möglich, lassen Sie den Wrapper keine Argumente annehmen; andernfalls sollten ihre Argumente so beschränkt und unflexibel sein, wie sie sein können. Lassen Sie den Wrapper streng die Argumente steuern, die an die ausführbare Datei übergeben werden.
  4. Lassen Sie den Wrapper im Besitz von root,, aber verwenden Sie chown, um es eine geeignete Gruppe zuweisen, deren Mitgliedschaft keine Benutzer enthält.Möglicherweise möchten Sie eine neue Gruppe zu diesem Zweck starten, aber wenn Sie die Datei /etc/group auf Ihrem System scannen, ist es unwahrscheinlich, dass Sie eine bereits existierende Gruppe finden, die zu Ihnen passt. Zu Referenzzwecken können Sie Befehle, die bereits zu Spezialgruppen auf Ihrem System gehören, durch ls -l /bin /usr/bin | grep -vE '^([^[:space:]]+[[:space:]]+){2}(root[[:space:]]+){2}' oder Ähnliches auflisten.
  5. Geben Sie der Wrapper-Datei die Berechtigungen 6754, so dass sie mit Ausnahme der betreffenden Gruppe nicht ausführbar ist. die aufrufende Skript-Dateiberechtigungen 2755.

  • Gib das aufrufende Skript zu der Gruppe, und geben Wenn die anrufende Skript zu einer Gruppe gehört bereits, können Sie wahrscheinlich verwenden Sie einfach die gleiche Gruppe im gesamten Gebäude.

    Es sind verschiedene Varianten der Technik möglich, und es ist unwahrscheinlich, dass Sie genau die oben angegebene verwenden, aber wenn Sie die Manpage und/oder den Infoeintrag auf dem Befehl chown lesen und die Details der Dateiberechtigungen erfahren Wenn Sie etwas experimentieren, sollten Sie in der Lage sein, eine Lösung zu entwickeln, die für Sie funktioniert, ohne ein Sicherheitsrisiko darzustellen.

  • +0

    Das Ändern der Berechtigungen auf 6755 und das Entfernen des Sudos funktionierte. Vielen Dank! –

    1

    Wahrscheinlich ist es JAVA_HOME Problem, versuchen sudo -i verwenden, hier ist mein Arbeits Init-Skript:

    #!/bin/bash 
    # description: Glassfish Start Stop Restart 
    # processname: glassfish 
    # chkconfig: - 95 80 
    
    DOMAIN=domain555 
    
    GF_HOME=/opt/glassfish3 
    DOMAIN_DIR=/home/glassfish/domains 
    RUN_AS=glassfish 
    
    CMD_START="$GF_HOME/bin/asadmin start-domain --domaindir $DOMAIN_DIR" 
    CMD_STOP="$GF_HOME/bin/asadmin stop-domain --domaindir $DOMAIN_DIR" 
    
    function start() { 
        sudo -u $RUN_AS -i $CMD_START $DOMAIN 
    } 
    
    function stop() { 
        sudo -u $RUN_AS -i $CMD_STOP $DOMAIN 
    } 
    
    case $1 in 
    start) 
        start; 
    ;; 
    stop) 
        stop; 
    ;; 
    restart) 
        stop; 
        start; 
    ;; 
    esac 
    exit 0 
    

    JAVA_HOME und PATH sollte .bashrc oder .bash_profile

    Verwandte Themen