Ich versuche, einen einfachen Cron-Job in meinem Docker-Container hinzuzufügen. Er soll beim Setup hinzugefügt werden, damit er automatisch ausgeführt wird, sobald ./launcher rebuild app abgeschlossen ist.
Der Cron-Job funktioniert, wenn ich ihn manuell mit vim in die Datei /etc/cron.d/anacron eintrage. Wenn ich ihn jedoch ohne Öffnen und Speichern der Datei bearbeite (z. B. mit echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron), scheint Cron die Änderung nicht zu erfassen und führt den Job nicht aus.
Füge ich dann mit vim irgendwo eine Leerzeichen ein und speichere die Datei, erfasst Cron die Änderung und führt den Job aus.
Da die Änderungen beim Hinzufügen über den echo-Befehl nicht erkannt werden, funktioniert das Hinzufügen dieses Befehls in meiner app.yml-Datei nicht.
Ich habe auch versucht, nach dem Eintragen der Änderungen mit echo den Container mit docker restart app neu zu starten, was ebenfalls nicht funktioniert hat.
Ich habe das Gefühl, dass es einen einfacheren Weg geben müsste, den ich übersehe. Es scheint nicht der richtige Ansatz zu sein, die anacron-Datei nach dem Setup manuell bearbeiten zu müssen.
Danke für deine Rückmeldung! Vielleicht wird es damit klarer:
Ich betreibe ein selbst gehostetes Discourse-Repository mit einigen benutzerdefinierten Dateien.
Im script-Verzeichnis von Discourse befindet sich eine Datei namens email_me.py.
Beim Ausführen sendet diese Datei eine E-Mail mit dem Inhalt „Hello World!" an mich.
Ich möchte einen Cron-Job im Discourse-Docker-Container einrichten, der diese Datei jede Minute ausführt.
Dies kann erreicht werden, indem man manuell die Zeile * * * * * root python3 /var/www/discourse/script/email_me.py mit einem Editor wie vim in die Datei /etc/cron.d/anacron einfügt.
Ich möchte, dass der oben genannte Cron-Job beim Einrichten des Discourse-Containers ausgeführt wird, kann dies jedoch nicht über die app.yml-Datei mit vim tun.
Ich habe versucht, echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron als Befehl in der app.yml-Datei zu verwenden. Dies fügt die Zeile zwar erfolgreich in die anacron-Datei ein, aber der Job wird NICHT ausgeführt (als ob die Änderung nicht registriert worden wäre).
Ich versuche lediglich, einen Weg zu finden, damit der Job: * * * * * root python3 /var/www/discourse/script/email_me.py
nach dem Neuaufbau mit ./launcher rebuild app ausgeführt wird.
Du solltest @eviltrout Rat wirklich befolgen und dies ordnungsgemäß in einem Plugin mit unseren Sidekiq-geplanten Jobs umsetzen.
Wenn du jedoch mit diesen nicht unterstützten Änderungen am Cron experimentieren möchtest, musst du wahrscheinlich den Dienst nach dem Hinzufügen eines Jobs mit sv restart cron neu starten.
Um es noch klarer zu sagen: Mich interessiert, welches Ihr Endziel ist, nicht die Schritte, die Sie zur Erreichung dieses Ziels unternehmen. Wenn das Ziel darin besteht, jede Minute eine E-Mail zu erhalten, können Sie das in einer Sidekiq-Job in einem Plugin umsetzen, was deutlich einfacher ist.
Mein Endziel ist es, eine Datenbankabfrage auszuführen, um nach bestimmten Benutzeraktivitäten zu suchen, und eine E-Mail mit einer Tabelle, die die Ergebnisse enthält, zu versenden. Diese E-Mail dient als Vorkassebestätigung, da die Benutzer, die diese spezifische Aktivität durchgeführt haben, später am Tag über ein anderes von Cron gesteuertes Skript (via PayPal) bezahlt werden.
Ich habe bereits Skripte, die beide Aufgaben erledigen können, muss jedoch einen Weg finden, damit der Discourse-Container diese einmal pro Woche ausführt.
Ich bin mit Sidekiq nicht vertraut. Falls es dies bewerkstelligen kann, wo sollte ich anfangen, mich darüber zu informieren?
Vielen Dank!
(Außerdem habe ich sv restart cron und viele andere Methoden zum Neustarten von Cron ausprobiert, jedoch ohne Erfolg.)
Ich würde mit der Plugin-Tutorial-Serie beginnen, um die grundlegende Struktur eines Plugins zu verstehen:
Wenn du ein Beispiel dafür suchst, wie man einem Plugin einen Job hinzufügt, bietet das discourse-assign-Plugin einen, der regelmäßige Erinnerungen versendet:
Ja, das hat perfekt funktioniert. Ich musste den Ordner rr und die Datei cron.d.rr erstellen. Ich habe meinen Cron-Job in der Datei cron.d.rr platziert, und der Befehl cp hat funktioniert.
Vielen Dank!
Jetzt geht es daran, ein ordentliches Plugin zu schreiben…