Thursday, February 8, 2024

[SOLVED] problem with cronjob to run python script on ubuntu server

Issue

I have installed python3 following the rel="nofollow noreferrer">Digital Ocean guide and to run my python scripts just by command line, this is the bash I use and it works:

    ~$ source /home/username/python_projects/project_name/bin/activate
    ~$ python3 /home/username/python_projects/project_name.py
    ~$ deactivate

if I put that commands in crontab in the same order, nothing happens.

    0 7 * * * source /home/username/python_projects/project_name/bin/activate
    0 7 * * * python3 /home/username/python_projects/project_name.py
    0 7 * * * deactivate

What am I doing wrong?

Cronjob is active and running.

    ~$ systemctl status cron

The python file has this permissions:

    -rw-rw-r-- 1 user_name user_name 17075 Feb  7 02:30 python_projects/project_name.py

Solution

The activate job runs, then exits, and then the next cron job knows nothing about what it did. You want to run them all in the same process (though running deactivate at the end is pointless, as everything that activate did will be wiped when the job ends anyway).

In practice, you can run the Python interpreter from within the virtual environment directly.

For what it's worth, the error message about "no MTA installed" means that the output from cron was discarded because the system could not figure out how to send it by email. You'll probably want to change the rule to write the output to a file.

0 7 * * * cd python_projects && ./project_name/bin/python3 project_name.py >>project_name.log 2>&1

Perhaps notice that cron always starts in your home directory, so you don't have to spell out /home/username (provided of course that username is the user whose crontab this runs from).



Answered By - tripleee
Answer Checked By - Marie Seifert (WPSolving Admin)