2010-12-17 4 views
2

Ich benutze delayed_job, um einige Hintergrundprozesse auf meiner Rails-App auszuführen. Diese Prozesse lesen und schreiben in die DB und schreiben in eine Protokolldatei.Kann das Stoppen eines Daemons meine Daten beschädigen?

Meine Frage ist - wenn ich die Jobs stoppe, tötet es den Prozess (was am Ende meine Daten korrumpieren kann) oder wartet es auf den Job oder etwas in der Art?

Antwort

2

Das hängt davon ab, wie Sie Ihren Code geschrieben haben.

Wenn Sie einen Auftrag löschen, wird der Stecker auf Ihren Code gedrückt und sofort gestoppt. Das kann in der Mitte eines Schreibvorgangs sein oder bevor ein Puffer gelöscht oder eine Datei ordnungsgemäß geschlossen wird.

Wenn Sie Aufgaben haben, die abgeschlossen werden müssen, können Sie Signale abfangen. Ihr Code kann dann wählen, das Signal zu ignorieren und weiter zu laufen, was keine optimale Lösung ist, oder es könnte elegant herunterfahren, Puffer leeren, DB-Verbindungen schließen, Dateien schließen usw., gefolgt von einem Beenden.

Und der Grund für das Ignorieren eines Signals ist nicht gut. Einige werden vom Betriebssystem gesendet, um Apps vor dem Herunterfahren oder Neustarten des Systems zum Herunterfahren zu veranlassen. Apps, die nicht geschlossen werden, können den Benutzer oder Sysadmin verärgert machen, der dann einen Weg findet, es aufzugeben, höchstwahrscheinlich in einer unangemessenen Weise.

Auschecken Signal für weitere Informationen.

+1

Indem Sie Ihren Job so gestalten, dass alles oder nichts "transaktional" gelesen wird, könnte dies auf elegante Weise funktionieren. – hurikhan77

+0

@hurican: Der Client 'soft' trasactional 'macht keinen Sinn, wenn der getötete Daemon keine Transaktionen unterstützt. Die Frage ist also, ob seine DB Transaktionen unterstützt oder nicht. –

Verwandte Themen