Script automatisch starten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von drm, 20.09.2006.

  1. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    Hallo!
    Ich brauche mal eure Hilfe :hilfe2:
    Ich habe ein Script, dass alle 2 Stunden automatisch startet. Jetzt möchte ich dass daraus jede Woche am Montag um 20:00 Uhr ein Script monday_update im Hintergrund gestartet wird. Sollte das Script monday_update schon gestartet sein, darf es nicht erneut gestartet werden.

    Habt ihr eine Idee wie ich das angehen kann?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Drizzt_DoUrden, 20.09.2006
    Drizzt_DoUrden

    Drizzt_DoUrden Tripel-As

    Dabei seit:
    06.01.2003
    Beiträge:
    200
    Zustimmungen:
    0
  4. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    Das Script, welches schon alle 2 Std. ausgeführt wird läuft schon mit einem Cron-Job. Jetzt soll in dem Script geschaut werden (per Datumsprüfung) ob Montag 20 Uhr ist und ein anderes Script gestartet werden.

    Wie kann ich aus einem Script sagen, es soll ein anderes Script gestartet werden, und vorher prüfen ob dieses Script schon läuft, da wenn es schon läuft das Script kein zweites mal ausgeführt werden soll. Die Prüfung des Datums krieg ich wohl alleine hin, brauche aber für das Aufrufen und überprüfen des Scripts hilfe.

    Schon mal danke im Voraus!
     
  5. #4 Wolfgang, 20.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Wo liegt das Problem?
    Du startest ein Script genauso, wie aus der Shell auch. Lediglich den vollen Pfad solltest du mit angeben, da u.U. die Umgebungsvariablen der Shell nicht userspezifisch verfügbar sind.
    Ob ein Programm läuft sagt dir eine Kombination aus ps und grep.



    Gruß Wolfgang
     
  6. #5 drm, 20.09.2006
    Zuletzt bearbeitet: 20.09.2006
    drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    Das macht Sinn, ps gibt den Status jedes im Moment im System laufenden Prozesses wieder und grep wird verwendet um nach Textmustern in Dateien zu suchen. Wofür steht denn dann in der if-Abfrage noch das a| ?

    Mein Script läuft auch jetzt soweit, allerdings gibt er mir noch zusätzlich
    usage: ps...
    'format' is one or more of:...
    aus? Warum?

    @Wolfgang: Danke für die Idee mit dem ps grep!
     
  7. #6 Wolfgang, 20.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Das a ist eine Option zu ps und der | ist eine Pipe, um das Ergebnis an grep zu verfüttern, welches wiederum nach dem Scriptname sucht.
    Bei Erfolg von grep liefert das ganze Konstrukt true zurück.

    Gib einfach mal ps a in deiner Shell ein.
    Welche Optionen dein ps versteht, kannst du rausbekommen wenn du die Manpage liest. ;)

    Gruß Wolfgang
     
  8. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    So sieht mein Code bisher aus:
    Code:
    wochentag="Montag"
    akt_wochentag="$(date +%A)"
    stunde=20
    minute=00
    akt_stunde="$(date +%H)"
    akt_minute="$(date +%M)"
    
    if [ $akt_wochentag == $wochentag ] && [ $akt_stunde$aktminute == $stunde$minute ] ;
      then
        if [ "$(ps a|grep update_monday)" ] ;
          then
            echo "update_monday wird bereits ausgeführt";
          else
            echo "update_monday wird gestartet"
            update_monday;
        fi
    else
        echo "Ausführung von monday_update nur um "$stunde":"$minute" Uhr!";
    fi
    
    Problem: Die Ausführung klappt nicht, selbst wenn es 20:00 Uhr ist erhalte ich die Meldung "Ausführung von monday_update nur um 20:00 Uhr!". Da der Cronjob nur alle zwei Stunden läuft ist doch sicherlich auch das Problem, dass ich nie sicher sein kann dass ich um 20 Uhr das Script ausführe. Hat jemand eine Idee?
     
  9. #8 Wolfgang, 20.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Du machst es dir sehr kompliziert.
    Dafür, dass ein Skript zu einem bestimmten Zeitpunkt läuft, ist definitiv die crontab da.
    Wenn du nun verhindern willst dass davon noch eine Instanz läuft, schreib einfach am Beginn des Skriptes selbst die Prüfung rein, und beende wenn es läuft.
    Damit sparst du dir den ganzen Trouble.
    Zeitnahes Prüfen auf Gleichheit ist immer ein Risiko in diesem Fall.
    Wenn du wirklich damit arbeiten willst (siehe meine vorige Bemerkung) dann musst du mit dem Timestamp arbeiten und auf >= prüfen.

    GNU/date kennt date +%s
    Damit kannst du dann sogar rechnen.

    Gruß Wolfgang
     
  10. #9 drm, 20.09.2006
    Zuletzt bearbeitet: 20.09.2006
    drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    Ja, ich möchte verhindern, dass davon noch eine Instanz läuft...
    Ich habe auch irgendwie das Gefühl, dass das umständlich ist was ich gerade mache, allerdings verstehe ich deinen Vorschlag nicht ganz. Welche Prüfung meinst du zu Beginn?
    Bei meiner Lösung (siehe oben) fehlte übrigens nur noch der Unterstrich (_) bei $aktminute, jetzt funktioniert mein Script, allerdings nur wenn es genau während der Zeit - hier 20:00 Uhr - ausgeführt wird. Das einzige Problem hierbei ist noch, dass ich nicht nur sagen möchte, er soll es Punkt 20:00 Uhr ausführen, sondern er soll es zwischen 19:45 - 20:15 Uhr ausführen, weil nur dann sichergestellt ist dass der andere Cronjob während dieser Zeit auf das Script zugreift!!!
    Wie kann man das am Besten in der if-Abfrage machen, oder geht es dort gar nicht?
    Code:
    if [ $akt_wochentag == $wochentag ] && [ $akt_stunde$aktminute == $stunde$minute ] ;
    
    Würde mich sehr freuen wenn mir jemand weiterhelfen könnte :-)
     
  11. #10 Schlaubi_fi.de, 20.09.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Mach es sauber: Bau das Skript so um, dass das Skript ausschließlich die Funktion beinhaltet. Die Zeitsteuerung (wann bzw. in welchem Zeitraum das Skript läuft) regelst du mit der Crontab bzw. als CronJob - denn dafür ist der Cron-Daemon genau da!
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 Wolfgang, 20.09.2006
    Zuletzt bearbeitet: 20.09.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    allo
    Also schreib dir ein Startskipt, welches dein Skript aufruft, und trage das in deine crontab ein.
    Trag es so ein, dass es jeden Montag um 20:00 Uhr startet.
    In das schreibst du einfach die Abfrage rein, ob dein Skript schon läuft und startest dieses dann, oder beendest das Startskript ohne Aktion.

    Wenn das script als Crotjob läuft müsstest du allerdings die vollen Pfade angeben und bei ps auch nicht tty -basierte Programme ausgeben.
    Könnte also so ähnlich aussehen:
    Code:
    if [ "$(ps ax |grep "[S]criptname")" ];
    then
    echo "Script läuft schon";
    exit;
    else
    /path/to/script/Script;
    fi
    
    Muss natürlich mit Shebang und ausführbar sein.

    cron übernimmt dann alles für dich, und du brauchst keine eigenen Hacks mit der Zeit einbauen.

    Du solltest immer bedenken, dass auch ein Cronjob mal verzögert starten kann, so dass ein direkter Vergleich daneben gehen kann.

    Gruß Wolfgang
     
  14. drm

    drm Eroberer

    Dabei seit:
    29.08.2006
    Beiträge:
    59
    Zustimmungen:
    0
    Hab's jetzt mit crontab gemacht, die Prüfung ob's schon aktiv ist funktioniert auch, vielen lieben Dank für eure Hilfe und Unterstützung!!!
     
Thema: Script automatisch starten
Besucher kamen mit folgenden Suchen
  1. python skrippt selbstständig ausführen

Die Seite wird geladen...

Script automatisch starten - Ähnliche Themen

  1. Script mit automatischer Benutzernameldung

    Script mit automatischer Benutzernameldung: Hallo, ich habe mehrere Scripte in dennen ich per SSH einige Befehle ausführen lasse auf verschiedenen Rechnern. Nun habe ich das Problem das...
  2. How to start a script automatisch in rc5.d

    How to start a script automatisch in rc5.d: Hi folks Seit ein paar Tage versuche ich die "squid" Applikation nach dem Reboot automatisch zu starten, ohne erfolg :( Ja, ich habe die...
  3. INIT Script startet nicht automatisch

    INIT Script startet nicht automatisch: Hallo, ich habe ein init script geschrieben, welches sich auch super manuell starten lässt. Leider startet es nicht selbständig beim Boot...
  4. Automatischer Start von Beryl per Script

    Automatischer Start von Beryl per Script: ich poste mal mein problem mit beryl und zwar habe ich versucht per softlink "beryl und beryl-manger" in ~/.kde/Autostart gelegt, aber jedesmal...
  5. Bei start des Bildschirmschoner automatisch script starten

    Bei start des Bildschirmschoner automatisch script starten: Hi @all ! Weiß jemand von euch wie es möglich ist das wenn der Bildschirmschoner unter KDE (egal ober der eigene von kde oder xscrennsaver)...