/ etc / crontab wofür steht "test -x"?

9

In meiner /etc/crontabDatei habe ich:

# m h dom mon dow user  command
17 *  * * * root    cd / && run-parts --report /etc/cron.hourly
25 6  * * * root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6  * * 7 root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6  1 * * root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Ich weiß, was dies in der Praxis bewirkt, aber ich verstehe die Befehlszeilen nicht.

Mann "Test" hilft überhaupt nicht:

test - check file types and compare values

Jede Hilfe wäre sehr dankbar

Olivier Pons
quelle

Antworten:

12

Aus FreeBSDs man test: [1]

 -x file       True if file exists and is executable.  True indicates only
               that the execute flag is on.  If file is a directory, true
               indicates that file can be searched.

Die Cronjobs testen also, ob anacron[2] installiert ist (dh an der erwarteten Stelle befindet sich eine ausführbare Datei namens anacron) und führen etwas aus, wenn nicht - nämlich die Skripte in den jeweiligen /etc/cron.*Ordnern.

(1) Bashs eingebaut testhat die gleiche -xOption

(2) Anacron ist ein Cron-Ersatz für Computer, die nicht immer ausgeführt werden . Wenn also ein Job wöchentlich ausgeführt werden soll , wird er im Verhältnis zur Betriebszeit des Computers wöchentlich ausgeführt , was bedeutet, dass nicht alle ausgeführt werden. sagen wir Freitag, aber alle 24 * 7 Stunden Betriebszeit. ( Bearbeiten Ich habe alles falsch verstanden, siehe Kommentare)

sr_
quelle
Das ist keine sehr genaue Beschreibung dessen, was Anacron tut. Es misst nicht die Betriebszeit. Sobald Sie den Computer wieder einschalten, werden einfach Jobs ausgeführt, deren geplante Laufzeit bei ausgeschaltetem Computer aufgetreten ist. Normales Cron überspringt einen Job, wenn der Computer zum Zeitpunkt der geplanten Ausführung nicht eingeschaltet ist.
cjm
Oh, dann habe ich es falsch verstanden (oder es mit dem verwechselt, was fcron macht? Es gab einen anderen Cron-Ersatz ...). danke für das Heads-up
sr_
@cjm afaik anacron benötigt eigene Konfigurationsdateien. Sie müssen also explizit Anacron-Jobs konfigurieren.
Nils
@Nils, ich habe nicht versucht, etwas anderes zu implizieren. Ich möchte nur darauf hinweisen, dass "alle 24 * 7 Stunden Betriebszeit" völlig falsch ist. Der Zeitplan von Anacron basiert auf der Kalenderzeit und nicht auf der Verfügbarkeit.
CJM
@cjm Wenn die geplante Laufzeit mehrerer Jobs beim Ausschalten des Computers und beim erneuten Einschalten des Computers aufgetreten ist, werden die Jobs in aufsteigender Reihenfolge der geplanten Zeit ausgeführt?
Omkar Neogi
5

Sie kennen vielleicht [ -x <filename> ]. test -x <filename>macht das gleiche, teste, ob diese Datei existiert und ausführbar ist.

Favadi
quelle
1

Wie in der Manpage angegeben, ist test eval sehr ähnlich, es wertet einen bedingten Ausdruck expr aus und wird mit dem Rückgabestatus beendet. In häufig vorkommenden Fällen wird test verwendet, um den Dateityp als Ausdruck zu bestimmen. In diesen Fällen wird geprüft, ob entweder ein wahrer oder ein falscher Fall zurückgegeben wird. In Ihrer Crontab, test -x filenamewo Dateiname als Ausdruck verwendet wird. Dies entspricht auch [ -x filename ]. Dies gibt true zurück, wenn die Datei vorhanden und auch ausführbar ist (Bit ist gesetzt). man testgibt eindeutige Details zu den verschiedenen Optionen für den Typ an, um die bedingten Ausdrücke in den Dateien und andere gültige Shell-Ausdrücke auszuwerten.

Zum Beispiel:

test -1 -gt -2 && echo yes würde ja drucken.

test 0x100 -eq 1 Fehler -> Test: Ganzzahliger Ausdruck vor -eq erwartet

Nikhil Mulley
quelle
Meinen Sie die evalAussage in sh / ksh / bash / zsh?
Arcege