When you have a python virtual environment you would activate the virtual environment’s python as such:
source /home/user/python_test_envs/test_env/bin/activate
But when you try to run this command in cron it will not work because by default crontab uses /bin/sh which does not support the source command.
So you can do the following in your crontab:
SHELL=/bin/bash
*/59 * * * * source /home/sven/python_test_envs/test_env/bin/activate && /home/sven/python_test_envs/test_env/bin/python3 /home/sven/dev_stuff/python_dev/grafana_grab.py && deactivate >> /tmp/cronout.txt 2>&1
Bascially just put this command as your first line in your crontab and this tells crontab to use /bin/bash
This part “&& deactivate >> /tmp/cronout.txt 2>&1” tells cron to output data to this location so we can see if it encounters any errors.
In Ubuntu 22 however, you can do “grep CRON /var/log/syslog” to see what cron is doing.
Another solution can be found here should you no be able to use /bin/bash:
https://stackoverflow.com/questions/3287038/cron-and-virtualenv
Essentially what it says is to do this:
cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py
Here you just CD to your virtual environment and use that Python to run your python script without activating the virtual environment.