2015-05-13 8 views
8

Ich habe einen UpStart-Service-Job, der viele (~ 100) Instanzen hat, die gestartet werden müssen. Jeder von ihnen ist ein ressourcenintensiver Prozess, der während des Starts viele Lese-/Schreibvorgänge ausführt. Wenn alle gleichzeitig starten oder erneut starten, verursachen sie Probleme aufgrund übermäßiger Lese-/Schreibanforderungen.So begrenzen Sie die Anzahl der Instanzen UpStart kann gleichzeitig starten oder respawnen

Ich brauche einen Weg, um die Anzahl der Instanzen zu begrenzen, die UpStart versucht, gleichzeitig zu starten oder Respawn. Gibt es zum Beispiel eine Möglichkeit, UpStart den Start einer weiteren Instanz bis 30 Sekunden nach dem Start oder dem erneuten Starten einer anderen Instanz zu verhindern?

+0

Wenn Ihr Job ein Shell-Skript ist, könnten Sie entweder eine zufällige Pause einfügen, so dass bei 10 gleichzeitig starten sie jeweils eine andere Anzahl von Sekunden Pause - und Sie könnten alle Jobs haben Sperren Sie eine bestimmte Datei beim intensiven Startvorgang. Aber das ist eine Shell-Scripting-Lösung, die nichts mit Upstart zu tun hat. – Paul

+1

können Sie ein Emporkömmling-Skript anzeigen? sind sie ungefähr gleich? – FeedTheWeb

+0

Ich denke, die von @Paul genannte Lock-Methode ist cool. Aber das erfordert Änderungen am App-Code selbst (übrigens ist es kein Shell-Skript. Es ist eine vollständig kompilierte Anwendung). Es ist überraschend, dass UpStart über keine eingebaute Funktionalität verfügt, um Dienstinstanzen (?) Automatisch zu halten und in eine Warteschlange zu stellen. – scai

Antwort

5

Sie können sie in der Reihenfolge starten, indem

start on started otherUpstartService 
+0

Wann wird ein Service von UpStart "gestartet"? Sobald der Prozess gestartet ist? Wenn es zu früh ist, kann es nicht helfen, die Ladung rechtzeitig zu verteilen. Wenn es zu spät ist, kann es zu viel Verzögerung geben. – scai

1

mit Ihnen pre-start oder post-stop nach jedem Auftrag zu unterbrechen können. Bsp post-stop exec sleep 5

+0

Wenn alle beim Start gleich lange schlafen, dann ist das Problem immer noch da. Gibt es eine Möglichkeit, die Schlafzeit zufällig zu gestalten? – scai

+0

Sie könnten etwas wie 'post-stop exec sleep $ (((RANDOM% 10) + 1))' tun, um zwischen 1 und 10 Sekunden zu schlafen. Ändern Sie einfach die 10 in eine andere Ganzzahl, um einen größeren Bereich zu erhalten –