GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wo ist der Cron-Timer?

Gibt es eine Möglichkeit, auf cron zuzugreifen Timer und erhalten die verbleibenden Sekunden bis zur nächsten Ausführung von Skripten in der crontab oder vielleicht die Sekunden seit dem letzten?

Akzeptierte Antwort:

Nicht einfach. crond wartet auf ein Signal vom Kernel und geht schlafen. Wenn es das Signal erhält, prüft es, ob in dieser Minute Cronjobs ausgeführt werden müssen, startet diese und geht wieder in den Ruhezustand.

Es ist ein sehr effizientes Design – cron verwendet keine CPU, während es schläft. Es hat auch kein Bewusstsein dafür, dass die Zeit vergeht. Wenn es in den Ruhezustand übergeht, setzt es ein „Timeout“, basierend darauf, wie lange es dauert, bis der nächste Befehl von einem „registrierten“ Cronjob ausgeführt werden muss.

Unter Solaris 10:

sol10-primary:/> # pflags  271  
271:    /usr/sbin/cron
        data model = _ILP32  flags = ORPHAN|MSACCT|MSFORK
 /1:    flags = ASLEEP  pollsys(0x8047c70,0x1,0x8047ce8,0x806ba00)

Während Sie den Cron-Daemon verfolgen, werden Sie sehen, dass er mit einer Zeitüberschreitung in den Ruhezustand wechselt, wie unten:

waitid(P_ALL, 0, 0x08047CD0, WEXITED|WTRAPPED|WNOHANG) Err#10 ECHILD
time()                                          = 1361952435
pollsys(0x08047C70, 1, 0x08047CE8, 0x0806BA00) (sleeping...)
        fd=3  ev=POLLRDNORM rev=0
        timeout: 105.000000000 sec
        sigmask = 0 0 0 0

Wenn Sie einen Cron-Job aktualisieren, wird der schlafende Prozess ebenfalls aufgeweckt, aber um seine eigene Konfiguration zu aktualisieren, wonach er mit dem neuen Timeout-Wert wieder in den Ruhezustand wechselt.

Es ist möglich, das eingestellte Timeout zu sehen. Beachten Sie, dass cron den Systemaufruf time kurz vor dem Einschlafen aufgerufen hat (was die Sekunden seit dem epoc zurückgibt). Wenn Sie dies also beobachtet haben (d. h. den Prozess nachverfolgt haben, als er den Systemaufruf time() aufgerufen hat), können Sie subtrahieren diese Zeit von der aktuellen und vergleichen Sie sie mit der Zeitüberschreitung, die für den pollsys-Aufruf festgelegt wurde.

Also… wie gesagt, nicht so einfach.


Linux
  1. Wohin gehen Dateien, wenn der Rm-Befehl ausgegeben wird?

  2. Wo ist die Inittab-Datei?

  3. Crontab-Protokoll:So protokollieren Sie die Ausgabe meines Cron-Skripts

  4. Wo ist die Itoa-Funktion in Linux?

  5. Wo ist die ausführbare PHP-Datei unter Ubuntu?

Der Timer-Befehl in Linux

Tutorial zur Verwendung des Timeout-Befehls unter Linux

Wo ist die php.ini-Datei auf einem Linux/CentOS-PC?

Wo ist die x86-64 System V ABI dokumentiert?

Wie genau sind Intervalltimer in Linux?

Wo befindet sich die updatedb-Datenbank?