at Befehl. Wie?

Diskutiere mit über: at Befehl. Wie? im Mac OS X - Unix & Terminal Forum

  1. matzh

    matzh Thread Starter MacUser Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Entweder ich stehe irgendwie völlig auf der Leitung oder es funktioniert wirklich nicht.
    Ich möchte dynamisch durch ein Skript einen Batch Job zu einer bestimmten Zeit starten (dieser Job soll nur unter gewissen Bedingungen laufen, darum kann ich es nicht einfach eingeben).
    Da die CalendarStartUp Items im launchd ja nun nicht funktionieren bleibt mir nur der Unix 'at' Befehl übrig. Die crontab Datei soll man ja nicht von Hand ändern, sondern nur mit crontab -e
    (wenn jemand ne Idee hat, wie das mit crontab geht, wäre es auch gut, das funktioniert nämlich).

    System: Powerbook G4, mit OS X 10.4.2

    1. Ich habe im System->Library->LaunchDaemons->com.apple.atrun.plist den "Disabled" Flag auf No gesetzt und mit "sudo launchctl list" sehe ich auch, dass er läuft.
    2. Ich gebe im Terminal einen "at job" ein:
    Code:
    username$ at 2022
    ls > test.txt
    <CTRL D>
    3. Ich bekomme eine entsprechende Bestätigung, dass der Job gequeued wurde (etwa 'job 8 at Sat Oct 22 20:22:00 2005')
    4. Nach einiger Zeit nach 2022 (laut atrun plist file wird dies alle 5 min ausgeführt) ist der Job aus der Queue verschwunden (Probe mit atq, wo er vorher immer aufgelistet wurde)

    Soweit sieht es echt gut aus, aber das File test.txt wird nicht geschrieben .
    Habe alle möglichen Varianten ausprobiert (at -f cmds 2022), echo "ls > test.txt" | at 2022) andere Kommandos usw. aber es passiert einfach nichts. :confused: Ist lange her, dass ich etwas mit Unix gemacht habe und vielleicht verpasse ich etwas völlig Blödes.

    Mit spotlight habe ich auch schon versucht, das Ausgabefile (test.txt) woanders zu finden. Ohne Erfolg
    Hat jemand diesen Befehl im Tiger mal erfolgreich benutzt ??

    Matthias
     
  2. sheep

    sheep MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    Registriert seit:
    21.03.2005
    Mit at kenne ich mich leider selber nicht besonders aus, aber du kannst einen Cronjob z.B. aus einem Script heraus definieren, indem du ausführst:

    crontab <datei>

    In der <datei> muss einfach eine Cron-Anweisung à la "* 20 * * * <script>" stehen.

    Ich hoffe, damit kannst du das so umsetzen, wie du es wolltest. Bedingungen kannst du ja direkt im auszuführenden Script <script> einbauen.

    Achtung: Cronjobs verlangen für alle Befehle den VOLLEN Pfad, also immer schön alles ausschreiben, sonst wunderst du dich, warum der Job nicht funktioniert [​IMG]. Es kann übrigens sein, dass das bei at auch so ist, aber da bewege ich mich auf unsicherem Boden...
     
  3. nick_dermot

    nick_dermot MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    22.07.2005
    Zumindest unter Panther deaktiviert

    Auszug aus man at:

    NOTE
    at, batch, atq, atrm are all disabled by default on Mac OS X. Each of
    these commands depend on the execution of atrun(8) which has been dis-
    abled due to power management concerns. Those who would like to use
    these commands, must first re-enable /usr/libexec/atrun by removing the
    leading '#' from the line

    Gruß
    Nick
     
    Zuletzt bearbeitet: 23.10.2005
  4. matzh

    matzh Thread Starter MacUser Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Danke für Eure Antworten. Ja, das mit dem crontab direkt ändern sollte schon irgendwie gehen. Da ich auch andere Sachen im crontab stehen habe, muss ich das mit sed recht kompliziert eingeben, von daher wäre der at schon besser.
    Wenn im crontab file die entsprechende Zeile mit dem skript "dummy.app" zunächst auskommentiert ist:
    crontab -l | sed 's/#\([a-zA-Z0-9_/* ]*\)dummy.asp/\1dummy.asp/' | crontab
    und für den Rückweg:
    crontab -l | sed 's/\([a-zA-Z0-9_/* ]*\)dummy.asp/#\1dummy.asp/' | crontab
    Das finde ich ziemlich "gehackt", da wäre ein einfacher "at" Befehl schon praktischer ;)

    @nick_dermot: ich glaube, ich hab das atrun schon richtig aktiviert (Schritt 1 oben):
    In der Console steht folgende Fehlermeldung:
    Oct 23 13:07:29 mhoelling atrun[1441]: File a00014011f63f8 is in wrong format - aborting

    Dazu findet man auch etwas im Google, dass ältere Versionen von Debian Linux atrun mit Benutzernamen mit 8+ Zeichen nicht unterstützen. Dazu gibt es wohl einen Patch, aber das ist mir zu kompliziert.
     
  5. sheep

    sheep MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    Registriert seit:
    21.03.2005
    Da hast du Recht, daran habe ich nicht gedacht, sorry. Irgendwie hatte ich im Kopf, dass "crontab <datei>" einen Job hinzufügt, aber das überschreibt ja alles, was natürlich nicht der Sinn der Übung ist...

    Hoffe, du kriegst es noch hin mit at [​IMG].
     
  6. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Wie wärs ganz einfach mit
    Code:
    sudo vi /etc/crontab
    ?

    at würde ich persönlich nicht einsetzen.
    cron ist AFAIK viel ressourcenschonender.
     
  7. sheep

    sheep MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    Registriert seit:
    21.03.2005
    Darf man das eigentlich? Ich dachte, man muss für das Editieren der Crontab zwingend "crontab -e" verwenden?

    Allerdings kann es so einfach ja ohnehin nicht sein, matzh wollte doch dynamisch einen Cronjob generieren (oder doch nicht?).
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Na, klar ;).
    Hab ich nicht so verstanden.
     
  9. matzh

    matzh Thread Starter MacUser Mitglied

    Beiträge:
    22
    Zustimmungen:
    0
    Registriert seit:
    03.07.2005
    Doch genauso ist es. Dynamisch.
    Mit "sudo crontab -e" bin ich vorher auch schon weitergekommen. Dies ist wahrscheinlich fast identisch mit dem vi.
    Ansonsten mache ich es halt wie oben angegeben, mit den sed-Filtern.
    Praktisch sind beim "at" auch solche Kommandos wie "at now +2 minutes".
    Das aus der Systemzeit "herauszufriemeln" und dann in die cron-Tabelle zu schreiben, ist schon ziemlich gehackt...

    Trotzdem, danke für die Antwort.
     
  10. sheep

    sheep MacUser Mitglied

    Beiträge:
    1.223
    Zustimmungen:
    24
    Registriert seit:
    21.03.2005
    Dann würde ich es anders machen -- Holzhackermethode:

    sudo echo "<dynamischer Cronjob>" >> /etc/crontab

    Sollte hinhauen. Also doch dynamisch, maceis ;).
     
Die Seite wird geladen...
Ähnliche Themen - Befehl Forum Datum
Befehl für die Verzeichnisstruktur im Terminal ? Mac OS X - Unix & Terminal 23.09.2014
Befehl zum Auslesen des Trim Status gesucht Mac OS X - Unix & Terminal 04.08.2014
Kurze Frage zu einem UNIX Befehl "du" Mac OS X - Unix & Terminal 28.11.2013
'ar' Befehl im Terminal Mac OS X - Unix & Terminal 08.01.2013
Frage zum Befehl mdfind Mac OS X - Unix & Terminal 29.12.2012

Diese Seite empfehlen

Benutzerdefinierte Suche