Ich habe mich gefragt, ob meine Crontab-Jobs richtig geschrieben wurden. Ich hoffe, sie auf einem VPS ausführen zu können, und eine Überwachung ist nicht wirklich möglich. Ohne weitere Umschweife sind hier meine Cron-Jobs:
# cd into directory at 2:57 AM
57 2 * * 1-5 cd /folder_name
# activate the virtual environment
58 2 * * 1-5 . env/bin/activate
# run the main script
59 2 * * 1-5 python main.py
# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C
Außerdem habe ich meine Systemuhr auf Ostküstenzeit umgestellt. Bedeutet das, dass die Cron-Jobs in der Ostküstenzeitzone ausgeführt werden?
Antwort1
Nein, cron
es ist keine Shell. Schreiben Sie ein Skript:
#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py
Machen Sie es ausführbar und richten Sie dann einen crontab
Eintrag darauf:
57 2 * * 1-5 /path/to/script
Das Skript sollte dann jeden Montag bis Freitag um 2:57 Uhr in der (von Ihrem Computer erwarteten) lokalen Zeitzone ausgeführt werden. Wenn Sie Ihr Mailsystem richtig konfiguriert haben, werden Ihnen die Ergebnisse (sofern vorhanden) per E-Mail zugesendet.
Antwort2
Deine Cronjobs sind nicht richtig geschrieben. Jeder Cronjob bekommt seine eigene Umgebung, das heißt, der cd
Befehl hat keinen Einfluss auf die folgenden Cronjobs.
Was virtuelle Umgebungen betrifft, empfehle ich, die virtuelle Umgebung manuell zu aktivieren und dann which python
selbst auszuführen. Dadurch erhalten Sie einen vollständigen Pfad zu einer Umgebung, python
die immer in dieser virtuellen Umgebung ausgeführt wird. Sie sollten diesen Python-Pfad in Ihrem Cron verwenden.
Die endgültige Crontab sollte ungefähr so aussehen:
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
Um den Prozess später zu beenden, ist die häufigste Lösung für dieses Problem die Verwendung einer PID-Datei. Es gibt Python-Bibliotheken, die Ihnen dabei helfen. Diese Antwortist zu diesem Thema recht ausführlich, hat aber nicht wirklich etwas mit der Crontab-Frage zu tun.