4

I know this question has been answered many time. I refereed heemayls answer in this post to set up the cron job. However, it is not working. Any idea on what is going wrong?

*/1 * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py

The following is the output of crontab -l

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/1 * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py
11
  • May you show us the output of crontab -l?
    – Gordster
    Commented Mar 24, 2020 at 20:50
  • Look up how to redirect your cron output into a file, so you can read it.
    – user535733
    Commented Mar 24, 2020 at 20:59
  • @Gordster edited in the post. Thank you. Commented Mar 24, 2020 at 21:01
  • 1
    Tell your script which display you wish the script to run, otherwise it won't run. */1 * * * * DISPLAY=:0.0 /usr/bin/env python3 /home/me/DownloadImages1.0.py Commented Mar 24, 2020 at 21:02
  • 1
    Note that */1 has no much sense. It means, every minute, where the rest of the integer division between that minute and one = zero. This always happens because everything can be divided by one without rest. You may have copy-pasted that from another script and then adapted. You can safetly replace */1 with * that it's its exact definition: run every minute. This does not solve your problem but simplify your answer. Having said that, your problem is in your specific Python script and you should read your crontab error logs. We can't help you without further information. Commented Mar 25, 2020 at 8:22

2 Answers 2

4

You need to tell your script which display you wish the script to run, otherwise it won't run.

Use a command like this:

*/1 * * * * DISPLAY=:0.0 /usr/bin/env python3 /home/me/DownloadImages1.0.py

You can also use a global DISPLAY variable just placing this at the top of your cronjobs list

# m h  dom mon dow   command
DISPLAY=:0.0
*/1 * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py

And you can also invoke the DISPLAY by exporting the variable from a bash script via

#!/bin/bash
export DISPLAY=":0.0"
/usr/bin/env python3 /home/me/DownloadImages1.0.py
3
  • 3
    Curious, what about the question lead you to know that DISPLAY:=0.0" needed to be added? That would be helpful to include in the answer
    – cutrightjm
    Commented Mar 25, 2020 at 5:35
  • 1
    Actually, the fact that the script required DISPLAY to be set should have been stated as a requirement by the OP in the question. Commented Mar 25, 2020 at 6:22
  • "Curios" is you didn't guess on your own. I have just seen this question and answered based on my experience, documented on this question askubuntu.com/q/733345/9598, whose comments leaded me to have this solution. Commented Mar 25, 2020 at 15:27
0

Nothing was working for me as well, because whatever I was doing, or the cron job you have written above is correct.

*/1 * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py

The problem was something else in my case which I never imagined, as when I execute the same python script on terminal, it would run fine.

python3 /home/me/DownloadImages1.0.py

Until I read somewhere that, the crontab version, runs as, when we run command via sudo su

When I ran, python3 /home/me/DownloadImages1.0.py in sudo su, it started giving me library not installed errors. After I did pip3 install xxx libraries install inside sudo su itself, the command ran successfully.

After that, crontab ran successfully as well.

In short try following out -

1- create hello.py

print('hello')

2- write a cron job to execute above python script and output to some log file, to verify whether your crontab is actually working without any python dependency.

sudo touch /home/me/out.txt
sudo crontab -e
1 (put next minute here) * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py > /home/me/out.txt

3- Check the logs of crontab

tail -f /var/log/syslog | grep cron -i

After your hello.py script is executed, check the out.txt file. If it has contents then everything is fine (this answer is only valid if there is output in out.txt).

4- sudo su 5- make following command run successfully.

tail -f /var/log/syslog | grep cron -i

6- Now, your cron job */1 * * * * /usr/bin/env python3 /home/me/DownloadImages1.0.py should run successfully.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .