Führen Sie regelmäßig ein Python-Skript mit cron in einer venv-Umgebung aus

So registrieren Sie einen Python-Job in cron und führen ihn regelmäßig in einer venv-Umgebung aus

Fazit

Sie können Python in der Venv-Umgebung verwenden, die Sie verwenden möchten.

$ crontab -e
* * * * * cd [Absoluter Pfad]; venv/bin/python foo.py

Konkretes Beispiel

Ich möchte Datum und Uhrzeit einmal pro Minute in eine Datei im jsonline-Format schreiben.

Betriebssystemumgebung

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.6
BuildVersion:	18G87

Erstellen Sie ein Verzeichnis, erstellen Sie eine virtuelle venv-Umgebung und installieren Sie das diesmal verwendete Paket jsonlines.

$ mkdir [Ort]
$ cd [Ort]
$ python -V
Python 3.7.1
$ python -m venv venv
$ source venv/bin/activate
(venv) $ pip install jsonlines

Schreiben Sie ein Python-Skript. Das Datum und die Uhrzeit der Verarbeitung werden als jsonline in out.jsonl geschrieben. Zur Bestätigung auch ausdrucken.

dt2jsonl.py


import datetime
import jsonlines

dt = datetime.datetime.now()
dict_now = {'date': str(dt.date()), 'time': str(dt.time())}

with jsonlines.open('out.jsonl', mode='a') as writer:
    writer.write(dict_now)

print('updated: '+ str(dt))

Bei der Verarbeitung sieht die Ausgabe folgendermaßen aus.

(venv) $ python dt2jsonl.py
updated: 2020-01-26 17:39:23.435616
(venv) $ cat out.jsonl
{"date": "2020-01-26", "time": "17:39:23.435616"}

Versuchen Sie, sich bei cron als python dt2jsonl.py zu registrieren. Da es sich um "* * * * *" handelt, sollte es einmal pro Minute verarbeitet werden. Schreiben Sie stderr und stdout mit >> /tmp/cron.log 2> & 1 in /tmp/cron.log, um den Fehler zu überprüfen und das Ergebnis zu drucken.

(venv) $ crontab -e
* * * * * python dt2jsonl.py >> /tmp/cron.log 2>&1

Beim Warten tritt ein Fehler in "/ tmp / cron.log" auf

(venv) $ tail -f /tmp/cron.log
python: can't open file 'dt2jsonl.py': [Errno 2] No such file or directory

Es scheint, dass dt2jsonl.py nicht gefunden werden kann. Überprüfen Sie also, wo sich der Cron befindet.

(venv) $ crontab -e
* * * * * pwd >> /tmp/cron.log 2>&1
(venv) $ tail -f /tmp/cron.log
/Users/[Nutzer]

Da Sie sich im Benutzerverzeichnis befinden, werde ich Ihnen den absoluten Pfad des Skripts mitteilen.

(venv) $ crontab -e
* * * * * python /Users/[Nutzer]/[Ort]/dt2jsonl.py >> /tmp/cron.log 2>&1
(venv) $ tail -f /tmp/cron.log
Traceback (most recent call last):
  File "/Users/[Nutzer]/[Ort]/dt2jsonl.py", line 2, in <module>
    import jsonlines
ImportError: No module named jsonlines

Diesmal bin ich zum Python-Skript gekommen, aber ohne jsonlines. Überprüfen Sie, welche Python von Cron verwendet wird, da sie nicht in der venv-Umgebung ausgeführt wird.

(venv) $ crontab -e
* * * * * which python >> /tmp/cron.log 2>&1; python -V >> /tmp/cron.log 2>&1
(venv) $ tail -f /tmp/cron.log
/usr/bin/python
Python 2.7.10

Ich verwende das System python2.7, also sollte ich etwas dagegen tun. Überprüfen Sie, welche Python verwendet werden soll.

(venv) $ which python
/Users/[Nutzer]/[Ort]/venv/bin/python

Schreiben Sie unter venv zu Python um.

(venv) $ crontab -e
* * * * * /Users/[Nutzer]/[Ort]/venv/bin/python /Users/[Nutzer]/[Ort]/dt2jsonl.py >> /tmp/cron.log 2>&1

Nach einer kurzen Wartezeit erhielt ich das Druckergebnis in / tmp / cron.log.

(venv) $ tail -f /tmp/cron.log
updated: 2020-01-26 17:48:00.924120
(venv) $ cat out.jsonl
{"date": "2020-01-26", "time": "17:39:23.435616"}

Ich dachte, dass es auch als jsonline in out.jsonl geschrieben wurde, aber es wurde am Anfang manuell ausgeführt, nicht das Ergebnis der Ausführung mit cron. Es befand sich im Benutzerverzeichnis, da es im Benutzerverzeichnis ausgeführt wurde.

(venv) $ cat ~/out.jsonl
{"date": "2020-01-26", "time": "17:48:00.924120"}
{"date": "2020-01-26", "time": "17:49:01.102146"}
{"date": "2020-01-26", "time": "17:50:00.278025"}

Die Position der Ausgabe ist unterschiedlich, aber Cron hat sie in der Venv-Umgebung gehandhabt. Es ist gut, die Ausgabe des Python-Skripts mit einem absoluten Pfad anzugeben. Ändern Sie dieses Mal das Ausführungsverzeichnis von cron.

(venv) $ crontab -e
* * * * * cd /Users/[Nutzer]/[Ort]; venv/bin/python dt2jsonl.py >> /tmp/cron.log 2>&1

Das habe ich erwartet.

(venv) $ tail -f /tmp/cron.log
updated: 2020-01-26 17:55:00.837256
(venv) $ cat out.jsonl
{"date": "2020-01-26", "time": "17:39:23.435616"}
{"date": "2020-01-26", "time": "17:55:00.837256"}

Warte eine Minute

(venv) $ cat out.jsonl
{"date": "2020-01-26", "time": "17:39:23.435616"}
{"date": "2020-01-26", "time": "17:55:00.837256"}
{"date": "2020-01-26", "time": "17:56:00.986909"}
{"date": "2020-01-26", "time": "17:57:01.167183"}
{"date": "2020-01-26", "time": "17:58:00.273073"}

Recommended Posts

Führen Sie regelmäßig ein Python-Skript mit cron in einer venv-Umgebung aus
Führen Sie das Python-Skript mit TS-220 cron aus
Verwenden von venv in der Windows + Docker-Umgebung [Python]
Einführung von sip-4.14 in der Python3.2.2-Umgebung mit MacOS 10.7.4
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Führen Sie Python Script regelmäßig in der AWS Data Pipeline aus
Arbeiten Sie in einer virtuellen Umgebung mit Python virtualenv.
Verwenden Sie jupyter-lab, das in einer virtuellen Python-Umgebung (venv) installiert ist.
Verwenden Sie Python in einer Anaconda-Umgebung mit VS-Code
virtuelle Umgebung in Python
Python-Umgebung mit Docker-Compose
Entwicklungsumgebung in Python
Virtuelle Umgebung mit Python 3.6
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
Verwalten Sie Cron-Jobs mit Python
Schaben mit Selen in Python
Betreiben Sie LibreOffice mit Python
Installieren Sie die Python-Umgebung mit Anaconda
Schaben mit Chromedriver in Python
POST json mit Python 3-Skript
Verwalten Sie die Python-Umgebung mit virtualenv
Debuggen mit pdb in Python
Venv Umgebung mit Windows Powershell
Führen Sie externe Befehle mit Python aus
Behandeln Sie Umgebungsvariablen in Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Erstellen Sie eine Python3-Umgebung mit Ubuntu 16.04
Bereiten Sie die Python3-Umgebung mit Docker vor
Scraping mit Tor in Python
Erstellen Sie mit direnv eine Python-Umgebung
Tweet mit Bild in Python
Führen Sie regelmäßig Befehle mit crontab aus
Kombiniert mit Ordnungszahl in Python
venv: Verwaltung der virtuellen Python-Umgebung
Python mit Pyenv und Venv
Python Standard virtuelle Umgebung venv
jupyter notebook in python3.8 venv umgebung
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Videos können in der Python-Entwicklungsumgebung nicht mit Spyder geladen werden
Installieren Sie CaboCha in der Ubuntu-Umgebung und rufen Sie es mit Python auf.
Zahlenerkennung in Bildern mit Python
Führen Sie das Python-Skript aus der Batchdatei aus
Beginnen Sie mit Python! ~ ① Umweltbau ~
Testen mit Zufallszahlen in Python
GOTO in Python mit erhabenem Text 3
Arbeiten mit LibreOffice in Python: Importieren
Richten Sie mit Homebrew eine moderne Python-Umgebung ein
Scraping mit Selen in Python (Basic)
CSS-Analyse mit cssutils in Python
Installieren Sie Scrapy in einer Python Anaconda-Umgebung
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Numer0n mit Elementen, die mit Python erstellt wurden
Erstellen Sie eine virtuelle Umgebung mit Python!
Öffnen Sie UTF-8 mit Stückliste in Python
Holen Sie sich den Skriptpfad in Python
Erstellen einer virtuellen Umgebung mit Python 3