Den Job nur einmal und nur bei geringer Auslastung auslösen

Den Job nur einmal und nur bei geringer Auslastung auslösen

Ich möchte meine Gtags automatisch aktualisieren, aber nur, wenn das System im Leerlauf ist.

Um dies zu erreichen, verwende ich, iupdateum die interessanten Teile meines Quellordners zu überwachen. Aber ich habe ein Problem mit dem „Leerlauf“-Teil: Ich weiß, dass der batchBefehl Jobs ausführen kann, wenn die Last unter 1,5 (oder einen konfigurierten Wert) fällt. Aber es kann vorkommen, dass er mehrmals iupdateausgeführt wird batch, bevor der Job ausgeführt wird, was zu mehreren Gtags-Updates führen würde.

Natürlich könnte ich eine Sperrdatei erstellen und batchnur starten, wenn sie vorher nicht aufgerufen wurde.

Aber gibt es eine standardisiertere Methode? Ich hoffe auf so etwas wie batch_only_once...

Antwort1

Das hier erledigt es für Sie:

$ cat /etc/lsb-release | grep -i desc
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
$ apt-cache show run-one
....
Description-en: run just one instance of a command and its args at a time
 This utility will run just one instance at a time of some command and
 unique set of arguments (useful for cronjobs, eg).

Antwort2

Sie können ein Wrapper-Skript erstellen, das zuerst die atqanderen Batch-Jobs analysiert und bereinigt, indem es verwendet atrm.

verwandte Informationen