Python script als cronjob

Technische problemen? Hier kun jij jouw vragen stellen!
Forumregels
Check eerst onze helpsectie (https://www.antagonist.nl/help) voordat je hier een vraag stelt. Voor de meeste vragen hebben we uitgebreide handleidingen met uitleg.
Plaats reactie
ramonvermeulen
Berichten: 6
Lid geworden op: 10 dec 2020, 14:47

Python script als cronjob

Bericht door ramonvermeulen » 16 mei 2021, 19:39

Ik heb een python script die ik graag als cronjob zou willen uitvoeren. Echter als ik SSH naar de machine staat pip zover ik zie niet geïnstalleerd, Python staat wel geïnstalleerd en is bereikbaar via het commando:

Code: Selecteer alles

[debxxxxxx@sxxx debxxxxxx]$ python3
Python 3.4.10 (default, Oct  4 2019, 19:39:58)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Maar pip niet:

Code: Selecteer alles

[debxxxxxx@sxxx debxxxxxx]$ pip
-bash: pip: command not found
[debxxxxxx@sxxx debxxxxxx]$ pip3
-bash: pip3: command not found
Ik heb speciaal hiervoor mijn package van Slim naar Plus geupgrade zodat ik eindelijk python scripts kon gaan draaien. Daarnaast zie ik dat het pyhon 3.4 is, terwijl ik zelf graag python 3.7 of hoger draai.

Er zijn namelijk enkele packages die ik zou willen installeren via pip.
Als dit kan denk ik dat ik vervolgens op de volgende manier het script kan runnen (dit commando kan dus ook in cron gebruikt gaan worden):

Code: Selecteer alles

/usr/local/bin/python3 /path/naar/script.py
Voor m'n wordpress back-end heb ik een databaseje met producten die ik graag dagelijks zou willen updaten met een externe API, hiervoor heb ik dit script gebouwd.

Joris de Leeuw
Antagonist staff
Berichten: 1311
Lid geworden op: 13 feb 2016, 20:15

Re: Python script als cronjob

Bericht door Joris de Leeuw » 17 mei 2021, 14:41

Hallo Ramon,

Om Python 3.7 samen met pip te gebruiken zul je eerst een virtual enviroment (virtualenv) dienen aanmaken. Als klant heb je bij ons namelijk de mogelijkheid om meerdere virtual enviroments aan te maken met losse gekozen Python versies als mede eigen packages.

Hoe dat in zijn werk gaat is te lezen op: https://www.antagonist.nl/blog/beginnen-met-python/

Ook voor het aanroepen van cronjobs zul je eerst het commando voor de virtual enviroment ervoor dienen zetten zodat de cronjob in de juiste virtual enviroment wordt uitgevoerd.
Met vriendelijke groet,

Joris de Leeuw
Antagonist staff

ramonvermeulen
Berichten: 6
Lid geworden op: 10 dec 2020, 14:47

Re: Python script als cronjob

Bericht door ramonvermeulen » 17 mei 2021, 19:39

Joris de Leeuw schreef:
17 mei 2021, 14:41
Hallo Ramon,

Om Python 3.7 samen met pip te gebruiken zul je eerst een virtual enviroment (virtualenv) dienen aanmaken. Als klant heb je bij ons namelijk de mogelijkheid om meerdere virtual enviroments aan te maken met losse gekozen Python versies als mede eigen packages.

Hoe dat in zijn werk gaat is te lezen op: https://www.antagonist.nl/blog/beginnen-met-python/

Ook voor het aanroepen van cronjobs zul je eerst het commando voor de virtual enviroment ervoor dienen zetten zodat de cronjob in de juiste virtual enviroment wordt uitgevoerd.
Ik heb het idee dat hierbij ook persee gelijk een uwsgi service wordt aangemaakt die dan via een route aanroepbaar is. Liever heb ik dat niet, en heb ik gewoon puur een losse venv waarmee ik m'n script standalone kan draaien zonder dat het via HTTP aanroepbaar is. Dit is dus puur een script dat ik dagelijks wil draaien voor dataverwerking. Is het op de een of andere manier ook mogelijk om zelf via de commandline een venv aan te maken? Vind het dan overigens prima om het venv activate commando toe te voegen aan de crontab.

Joris de Leeuw
Antagonist staff
Berichten: 1311
Lid geworden op: 13 feb 2016, 20:15

Re: Python script als cronjob

Bericht door Joris de Leeuw » 18 mei 2021, 15:21

Beste Ramon,

Wij gebruiken geen uwsgi, maar specifiek Passenger om via de webserver (Apache) de aanvragen naar de juiste virtual enviroment door te sturen.

Je kan echter een Python of Node.js script ook direct vanuit de virtual enviroment aanroepen. Zonde tussenkomst van HTTP. Dat hoeft dus niet per se en je kan dus HTTP aanvragen ook negeren/blokkeren in je Python applicatie.

Zie ook een voorbeeld 'Je eerste testpagina toevoegen' op https://www.antagonist.nl/blog/beginnen-met-python/ hoe je direct Python aanroept vanuit je virtual enviroment.
Met vriendelijke groet,

Joris de Leeuw
Antagonist staff

Plaats reactie